Qt-Qt之grabWindow实现截图功能

相关资料:

https://download.csdn.net/download/zhujianqiangqq/86539726     CSDN代码包下载

实例代码;

.pro

 1 QT       += core gui
 2 
 3 greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
 4 
 5 CONFIG += c++11
 6 
 7 # The following define makes your compiler emit warnings if you use
 8 # any Qt feature that has been marked deprecated (the exact warnings
 9 # depend on your compiler). Please consult the documentation of the
10 # deprecated API in order to know how to port your code away from it.
11 DEFINES += QT_DEPRECATED_WARNINGS
12 
13 # You can also make your code fail to compile if it uses deprecated APIs.
14 # In order to do so, uncomment the following line.
15 # You can also select to disable deprecated APIs only up to a certain version of Qt.
16 #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
17 
18 SOURCES += \
19     main.cpp \
20     mainwindow.cpp
21 
22 HEADERS += \
23     mainwindow.h
24 
25 FORMS += \
26     mainwindow.ui
27 
28 LIBS += -lgdi32
29 LIBS += -luser32
30 
31 # Default rules for deployment.
32 qnx: target.path = /tmp/$${TARGET}/bin
33 else: unix:!android: target.path = /opt/$${TARGET}/bin
34 !isEmpty(target.path): INSTALLS += target
35 
36 RESOURCES +=
View Code

main.cpp

 1 #include "mainwindow.h"
 2 
 3 #include <QApplication>
 4 
 5 int main(int argc, char *argv[])
 6 {
 7     QApplication a(argc, argv);
 8     MainWindow w;
 9     w.show();
10     return a.exec();
11 }
View Code

mainwindow.h

 1 #ifndef MAINWINDOW_H
 2 #define MAINWINDOW_H
 3 
 4 #include <QMainWindow>
 5 
 6 #include <QGuiApplication>
 7 #include <QScreen>
 8 #include <QDesktopWidget>
 9 #include <Qpainter>
10 
11 #include "windows.h"
12 #include "winuser.h"
13 #include <QWindow>
14 #include <QPushButton>
15 #include <QVBoxLayout>
16 #include <QDebug>
17 
18 QT_BEGIN_NAMESPACE
19 namespace Ui { class MainWindow; }
20 QT_END_NAMESPACE
21 
22 class MainWindow : public QMainWindow
23 {
24     Q_OBJECT
25 
26 public:
27     MainWindow(QWidget *parent = nullptr);
28     ~MainWindow();
29 
30     void paintEvent(QPaintEvent* e) override;
31     void timerEvent(QTimerEvent* e);
32 private:
33     Ui::MainWindow *ui;
34     QScreen* m_pScreen = nullptr;
35     QWindow *calcWin;
36     QWidget *calcWidget;
37     QWidget *owidget;
38 };
39 #endif // MAINWINDOW_H
View Code

mainwindow.cpp

 1 #include "mainwindow.h"
 2 #include "ui_mainwindow.h"
 3 
 4 MainWindow::MainWindow(QWidget *parent)
 5     : QMainWindow(parent)
 6     , ui(new Ui::MainWindow)
 7 {
 8     ui->setupUi(this);
 9     setWindowTitle(QStringLiteral("Qt之grabWindow实现截图功能"));
10     m_pScreen = QGuiApplication::primaryScreen();
11     startTimer(40);   //1秒25帧
12 }
13 
14 MainWindow::~MainWindow()
15 {
16     delete ui;
17 }
18 
19 void MainWindow::paintEvent(QPaintEvent *e)
20 {
21     LPCWSTR className = TEXT("Qt5QWindowIcon");// Qt5QWindowIcon // Notepad++
22     HWND hwnd = FindWindow(className, NULL);
23     // 截取全屏, 指定窗口Id进行截屏
24     // QPixmap pix = m_pScreen->grabWindow(QApplication::desktop()->winId());
25     QPixmap pix = m_pScreen->grabWindow((WId)hwnd);
26     //绘制截屏
27     QPainter p;
28     p.begin(this);
29     p.drawImage(QPoint(0, 0), pix.toImage());
30     p.end();
31 }
32 
33 void MainWindow::timerEvent(QTimerEvent *e)
34 {
35     update();  //更新窗口
36 }
View Code

mainwindow.ui

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <ui version="4.0">
 3  <class>MainWindow</class>
 4  <widget class="QMainWindow" name="MainWindow">
 5   <property name="geometry">
 6    <rect>
 7     <x>0</x>
 8     <y>0</y>
 9     <width>976</width>
10     <height>741</height>
11    </rect>
12   </property>
13   <property name="windowTitle">
14    <string>MainWindow</string>
15   </property>
16   <widget class="QWidget" name="centralwidget">
17    <widget class="QWidget" name="widget" native="true">
18     <property name="geometry">
19      <rect>
20       <x>420</x>
21       <y>120</y>
22       <width>321</width>
23       <height>251</height>
24      </rect>
25     </property>
26    </widget>
27   </widget>
28  </widget>
29  <resources/>
30  <connections/>
31 </ui>
View Code

 

posted on 2022-09-15 18:17  疯狂delphi  阅读(181)  评论(0编辑  收藏  举报

导航