Qt把控件截图并保存到剪切板、保存到图片文件

来源:互联网 发布:威海市南海新区知乎 编辑:程序博客网 时间:2024/05/18 02:53

1,简介


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

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



2,效果


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



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



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



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



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




3,涉及技术


表格的右键菜单;

控件截图;

QT提供的剪切板类使用;

保存对话框调用;


4,主要代码


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



MainWindow.h:

#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>namespace Ui {class MainWindow;}class MainWindow : public QMainWindow{    Q_OBJECTpublic:    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