Qt实现截图的步骤如下:
创建一个QWidget或QWindow对象,并确保它已经被显示出来。
使用QPixmap::grabWindow()函数获取窗口对象的截图。该函数需要传入窗口对象的句柄、左上角的x、y坐标以及截图的宽度和高度。
将截图保存为PNG或JPEG格式的文件,可以使用QImageWriter类。
下面是一个基于QMainWindow的例子:
#include <QtWidgets>
class MainWindow : public QMainWindow {
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr) : QMainWindow(parent) {
QPushButton *button = new QPushButton("截图", this);
button->move(50, 50);
connect(button, &QPushButton::clicked, this, &MainWindow::takeScreenshot);
}
private slots:
void takeScreenshot() {
QScreen *screen = QGuiApplication::primaryScreen();
if (screen) {
QPixmap pixmap = screen->grabWindow(QApplication::desktop()->winId(),
x() + 50, y() + 50,
width() - 100, height() - 100);
QString filename = QFileDialog::getSaveFileName(this, "保存截图", ".", "Images (*.png *.jpg)");
if (!filename.isEmpty()) {
QImageWriter writer(filename);
writer.write(pixmap.toImage());
}
}
}
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
MainWindow window;
window.show();
return app.exec();
}
#include "main.moc"
在这个例子中,我们创建了一个QPushButton,并将其放置在QMainWindow中。当用户点击按钮时,我们使用QScreen::grabWindow()函数获取整个桌面(即QApplication::desktop()->winId()),并从左上角偏移50像素,截取宽度和高度减去100像素的区域。然后,我们使用QFileDialog让用户选择保存截图的位置和格式,并使用QImageWriter将pixmap转换为图像并保存到指定的文件中。
注意,如果您想截取QWidget或QLabel等对象的截图,只需将第一个参数传递给QWidget::winId()即可。