QT实用技术2:把控件截图并保存到剪切板、保存到图片文件

时间:2022-05-31 15:24:24

1,简介


界面某个数据展示控件,让用户可以复制到剪切板,方便粘贴到其他地方如QQ、word里面直接拿去交流使用;同时也可以保存到磁盘作为图片文件,作长期存储。

就和QQ聊天窗口的下面2个右键菜单功能一样:

QT实用技术2:把控件截图并保存到剪切板、保存到图片文件


2,效果


2.1 表格右键菜单:复制、另存为

QT实用技术2:把控件截图并保存到剪切板、保存到图片文件


2.2 复制的内容 粘贴出来的效果,只有该控件区域

QT实用技术2:把控件截图并保存到剪切板、保存到图片文件


2.3 另存为调起保存图片对话框

QT实用技术2:把控件截图并保存到剪切板、保存到图片文件


2.4 其中图片格式提供了常见的3种格式供选择

QT实用技术2:把控件截图并保存到剪切板、保存到图片文件


2.5 保存后生成到应用程序目录的图片文件

QT实用技术2:把控件截图并保存到剪切板、保存到图片文件



3,涉及技术


表格的右键菜单;

控件截图;

QT提供的剪切板类使用;

保存对话框调用;


4,主要代码


使用QT设计器添加1个表格TableWidget,并增加一些行列,效果如图:

QT实用技术2:把控件截图并保存到剪切板、保存到图片文件


MainWindow.h:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();

public slots:
void slotTableMenu(const QPoint &pos); //表格右键菜单

void slotActionCopy(bool checked); //复制
void slotActionSave(bool checked); //另存为

private:
Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H


MainWindow.cpp:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDir>
#include <QDateTime>
#include <QClipboard>
#include <QFileDialog>

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);

ui->tableWidget->setContextMenuPolicy(Qt::CustomContextMenu);
connect(ui->tableWidget, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(slotTableMenu(const QPoint&)));
}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::slotTableMenu(const QPoint &pos)
{
QMenu menu;
menu.addAction(QStringLiteral("复制"), this, SLOT(slotActionCopy(bool)));
menu.addAction(QStringLiteral("另存为"), this, SLOT(slotActionSave(bool)));
menu.exec(QCursor::pos());
}

//复制截图到剪切板
void MainWindow::slotActionCopy(bool checked)
{
QString strFile = QCoreApplication::applicationDirPath() + "\\ScreenShot\\Data_";
strFile = strFile + QDateTime::currentDateTime().toString("yyyyMMddHHmmss") + ".png";

QPixmap pix = QPixmap::grabWidget(ui->tableWidget);
QApplication::clipboard()->setPixmap(pix);
}

//截图另存为文件
void MainWindow::slotActionSave(bool checked)
{
//默认保存路径为当前应用程序路径下的ScreenShot文件夹,如果没有就新建该文件夹
QString strDir = QCoreApplication::applicationDirPath() + "\\ScreenShot";
QDir dir(strDir);
if(!dir.exists())
{
dir.mkdir(strDir);
}

QString strFile = strDir + "\\数据快照" + QDateTime::currentDateTime().toString("yyyyMMddHHmmss") + ".png";
QPixmap pix = QPixmap::grabWidget(ui->tableWidget);

QString fileName = QFileDialog::getSaveFileName(this,"保存图片",strFile,"PNG (*.png);;BMP (*.bmp);;JPEG (*.jpg *.jpeg)");
if (!fileName.isNull())
{
pix.save(fileName);
}
}


5,源码


QT实用技术2-把控件截图并保存到剪切板、保存到图片文件Demo.rar

百度网盘:https://pan.baidu.com/s/1o8OFVdC