1.搭建界面,包含延时选项,新建截图(按钮),保存截图(按钮),退出(按钮) label显示图片。ui文件如下:
2.单击新建截图,若未选择延时,则提示“beng”的声音;选择延时,则在延时spinbox数值后获取截图,并显示在界面上,随界面大小改变。
3.将获取的截图复制到系统剪切板上。
4.单击保存截图,若未获取截图提示模态对话框;若已获取则跳转到“我的图片”位置保存图片,默认png格式。
几个新的知识点摘出来如下:
1.使用qApp->beep()发出beng的声音
2.QPixmap::grabWindow(QApplication::desktop()->winId());//要添加头文件 获取截图
3.QClipboard *myBoard = QApplication::clipboard();
myBoard->setPixmap(pix);//将截图放入剪切板
4.QStandardPaths::writableLocation(QStandardPaths::PicturesLocation)//获取系统目录->我的图片
基于这个小项目可以有以下几个方面可以扩展,
1.可以像多数截图软件一样做成菜单栏的形式,添加上图标,美化。
2.可以通过获取鼠标左键按下事件时的鼠标位置截图自定义大小的图片。
3.可以设置快捷键获取截图。
main文件
#include "widget.h" #includeint main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; w.show(); return a.exec(); }
.h文件
#ifndef WIDGET_H #define WIDGET_H #include#include #include #include #include #include #include #include #include QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACE class Widget : public QWidget { Q_OBJECT public: Widget(QWidget *parent = nullptr); ~Widget(); private slots: void on_quitBtn_clicked(); void on_shotBtn_clicked(); void on_saveBtn_clicked(); protected: void resizeEvent(QResizeEvent *event); private: Ui::Widget *ui; QTimer *myTimer; QPixmap pix; }; #endif // WIDGET_H
.cpp文件
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_quitBtn_clicked()
{
this->close();
}
void Widget::on_shotBtn_clicked()
{
if(ui->isDelayed->isChecked()){
//获取当前屏幕
this->myTimer = new QTimer;
this->myTimer->start(ui->spinBox->text().toInt()*1000);
this->hide(); //隐藏
connect(myTimer,&QTimer::timeout,[=](){
//获取截图 grabWindow其他参数可获取自定义大小,这里默认全屏
pix = QPixmap::grabWindow(QApplication::desktop()->winId());//要添加头文件
ui->imgLabel->setPixmap(pix.scaled(ui->imgLabel->size()));
//将截图放入剪切板
QClipboard *myBoard = QApplication::clipboard();
myBoard->setPixmap(pix);
//关闭定时器
myTimer->stop();
//显示软件
this->show();
});
}
else{
qApp->beep();//调用系统提示音 beng的声音
}
}
void Widget::on_saveBtn_clicked()
{
if(pix.isNull()){
QMessageBox::information(this,"Info","请先获取截图");
return;
}
QString filename = QFileDialog::getSaveFileName(this,"Save File",
QStandardPaths::writableLocation(QStandardPaths::PicturesLocation),
tr("Images (*.png *.xpm *.jpg)"));
pix.save(filename);
}
void Widget::resizeEvent(QResizeEvent *event)
{
//窗体大小改变时,动态改变QLabel中pix的大小
ui->imgLabel->setPixmap(pix.scaled(ui->imgLabel->size()));
}



