QDesktopWidget类,提供了可以访问系统屏幕信息的方法。这个类提供有关该用户的桌面的信息,例如它的总大小,屏幕的数目,每个屏幕的几何形状,以及它们是否被配置为单独的台式机或单一的虚拟桌面。
有图有代码。
==============================================================================
承载截图的控件是: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); }
QString QStandardPaths::writableLocation(StandardLocation type)这个函数功能:返回所在类型的文件应写入的目录。
提示:QT4是用的是 下面的这种方式:
QString QDesktopServices::storageLocation(StandardLocation type)
这个就很简单了嘛。不过,还是把代码贴出来。万一哪天我 忘了 ......
首先要包含头文件:
#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());