1,简介
界面某个数据展示控件,让用户可以复制到剪切板,方便粘贴到其他地方如QQ、word里面直接拿去交流使用;
同时也可以保存到磁盘作为图片文件,作长期存储。
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_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学习群免费下载:
群号码:1149411109
群名称:Qt实战派学习群