实例代码;
.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
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
View Code
搜索
复制