QT学习之路之截图

QDesktopWidget类,提供了可以访问系统屏幕信息的方法。这个类提供有关该用户的桌面的信息,例如它的总大小,屏幕的数目,每个屏幕的几何形状,以及它们是否被配置为单独的台式机或单一的虚拟桌面。

有图有代码。

QT学习之路之截图_第1张图片

==============================================================================

承载截图的控件是:QLabel 。

-----------------------------------------------------------------------------------------------------------------------------------------

开发环境:QT creater。 

QT版本:5.4.0

-----------------------------------------------------------------------------------------------------------------------------------------

先说说这个New 按钮吧。看看代码:

//---新建槽函数
void CutScreen::on_NewBtn_clicked()
{
    if (ui->checkBox->isChecked())
    {
       this->hide();
       this->timer = new QTimer;
       QObject::connect(this->timer,SIGNAL(timeout()), SLOT(shotScreenslot()));
       //--启动定时器
       this->timer->start(ui->spinBox->value() * 1000);
    }
    else
    {
        qApp->beep();
    }
}
先将当前截图工具隐藏,再做了个定时器,设置好世间后, 将执行截图函数。

只有在 勾选 “隐藏”checkBox后, 才能截图,否将执行else。 这里qApp->beep(),执行结果是,系统将会发生一声提示音。

再来看看这个 shotScreenslot()函数的实现吧。

//--截图槽函数
void CutScreen::shotScreenslot()
{
    //---grabWindow是一个静态函数,不传参数,将截取整个屏幕。
    //---这里的这个参数 QApplication::desktop()->winId(), 是为了确定当前屏幕所在ID
    pixmap = QPixmap::grabWindow(QApplication::desktop()->winId());
    //---显示截图,函数scaled是将截图按比例缩放。
    ui->screenLabel->setPixmap(pixmap.scaled(ui->screenLabel->size()));
    //---将截图放入系统剪切板中
    QClipboard *clipboard =  QApplication::clipboard();
    clipboard->setPixmap(pixmap);
    //--显示截图
    this->show();
    //---停止定时器
    this->timer->stop();
}

我的注释写的很清楚了。这里就不再赘述了。


接下来是 Save 按钮事件。

//--保存槽函数
void CutScreen::saveshotScreenslot()
{
    //--!!!!!!注意 writableLocation()函数
    QString fileName = QFileDialog::getSaveFileName(this,"Save File", QStandardPaths::writableLocation(QStandardPaths::DesktopLocation));
    pixmap.save(fileName);
}

writableLocation()函数原型如下:

QString QStandardPaths::​writableLocation(StandardLocation type)
这个函数功能:返回所在类型的文件应写入的目录。

提示:QT4是用的是 下面的这种方式:

QString QDesktopServices::​storageLocation(StandardLocation type)


还有个跟随菜单,下图

QT学习之路之截图_第2张图片

这个就很简单了嘛。不过,还是把代码贴出来。万一哪天我 忘了 ...... 大笑大笑

首先要包含头文件:

#include <QMenu>
#include <QCursor>
#include <QAction>

其次是实现代码:

QMenu *menu = new QMenu;
    QAction *action = new QAction("Save As", this);
    QObject::connect(action,SIGNAL(triggered()), this, SLOT(saveshotScreenslot()));
    menu->addAction(action);
    menu->exec(QCursor::pos());

最后一行代码是,先获取鼠标的位置,菜单再根据鼠标的位置显示。

你可能感兴趣的:(Qclipboard,Qdesktopwidget,QStandardPaths)