qt固定像素大小截图可移动
时间: 2024-01-25 11:03:31 浏览: 87
要在Qt中实现固定像素大小可移动的截图,可以使用QScreen::grabWindow()函数和QPixmap::copy()函数配合使用。具体步骤如下:
1. 创建一个QWidget对象作为截图框体,设置它的大小和背景透明。
2. 在QWidget对象中重写mousePressEvent()、mouseMoveEvent()和mouseReleaseEvent()函数,实现鼠标拖动截图框体的功能。
3. 在QWidget对象中重写paintEvent()函数,在绘制截图框体的同时调用QScreen::grabWindow()函数截取屏幕或指定窗口的像素图,并使用QPixmap::copy()函数复制截取到的像素图中截图框体所在的区域,最后使用QPainter绘制复制后的像素图。
下面是一个示例代码,演示如何实现固定像素大小可移动的截图:
```
#include <QtWidgets>
class ScreenshotWidget : public QWidget
{
public:
ScreenshotWidget(QWidget *parent = nullptr) : QWidget(parent)
{
setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
setAttribute(Qt::WA_TranslucentBackground);
setMouseTracking(true);
}
protected:
void mousePressEvent(QMouseEvent *event) override
{
if (event->button() == Qt::LeftButton)
{
m_dragging = true;
m_dragStartPos = event->pos();
}
}
void mouseMoveEvent(QMouseEvent *event) override
{
if (m_dragging)
{
QPoint delta = event->pos() - m_dragStartPos;
move(pos() + delta);
}
}
void mouseReleaseEvent(QMouseEvent *event) override
{
if (event->button() == Qt::LeftButton)
{
m_dragging = false;
}
}
void paintEvent(QPaintEvent *event) override
{
QPainter painter(this);
// 截取屏幕或指定窗口的像素图
QPixmap screenshot = QGuiApplication::primaryScreen()->grabWindow(0);
// 复制截图框体所在的区域
QPixmap copy = screenshot.copy(x(), y(), width(), height());
// 绘制复制后的像素图
painter.drawPixmap(0, 0, copy);
// 绘制截图框体
painter.setPen(Qt::red);
painter.drawRect(rect().adjusted(0, 0, -1, -1));
}
private:
bool m_dragging = false;
QPoint m_dragStartPos;
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
ScreenshotWidget widget;
widget.resize(300, 300);
widget.show();
return app.exec();
}
```
在这个示例中,我们创建了一个ScreenshotWidget类作为截图框体,并实现了鼠标拖动截图框体和绘制截图框体的功能。在paintEvent()函数中,我们使用QScreen::grabWindow()函数截取了屏幕的像素图,并使用QPixmap::copy()函数复制截取到的像素图中截图框体所在的区域,最后使用QPainter绘制复制后的像素图和截图框体。
阅读全文