栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Day33Qt实现屏幕截图-2022-03-16

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Day33Qt实现屏幕截图-2022-03-16

Qt实现屏幕截图 场景

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"
#include 
int 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()));
}



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/768427.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号