逆枫゛

Qt学习群:1149411109 群文件提供博客源码,定期答疑、更新学习资料。

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

 

 

posted on 2017-09-03 17:26  逆枫゛  阅读(731)  评论(0编辑  收藏  举报