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

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实战派学习群

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逆枫゛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值