QT开发中文网

Qt实现桌面截图代码

下面是一个使用Qt实现桌面截图的示例代码,它可以让用户通过拖动鼠标选择屏幕上的区域进行截图:

#include <QApplication>
#include <QDesktopWidget>
#include <QFileDialog>
#include <QMouseEvent>
#include <QPushButton>
#include <QScreen>
#include <QLabel>
#include <QVBoxLayout>

class Screenshot : public QWidget
{
public:
    Screenshot()
        : m_captured(false)
    {
        setWindowFlags(Qt::FramelessWindowHint);
        setWindowState(Qt::WindowFullScreen);
        setCursor(Qt::CrossCursor);
    }

protected:
    void mousePressEvent(QMouseEvent *event) override
    {
        if (event->button() == Qt::LeftButton) {
            m_startPos = event->pos();
            m_captured = true;
        }
    }

    void mouseMoveEvent(QMouseEvent *event) override
    {
        if (m_captured) {
            m_endPos = event->pos();
            update();
        }
    }

    void mouseReleaseEvent(QMouseEvent *event) override
    {
        if (event->button() == Qt::LeftButton && m_captured) {
            QPixmap originalPixmap = grab();

            // Select the capture region and save it to a file.
            QPixmap croppedPixmap = originalPixmap.copy(QRect(m_startPos, m_endPos));
            QString filename = QFileDialog::getSaveFileName(this, tr("Save File"), "screenshot.png", tr("Images (*.png *.xpm *.jpg)"));
            if (!filename.isEmpty())
                croppedPixmap.save(filename);

            close();
        }
    }

    void paintEvent(QPaintEvent *event) override
    {
        QPainter painter(this);
        painter.setPen(Qt::red);
        painter.drawRect(QRect(m_startPos, m_endPos));
    }

private:
    QPoint m_startPos;
    QPoint m_endPos;
    bool m_captured;
};

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    // Create a new screenshot widget and show it.
    Screenshot screenshot;
    screenshot.show();

    return app.exec();
}

这个代码实现了一个继承自QWidget的截图类Screenshot,它通过重写鼠标事件来实现选择截图区域,并使用QPainter在窗口上绘制红色矩形来显示选定的区域。当用户完成截图后,程序会将其保存到用户指定的文件中。

请注意,此示例代码可能需要根据您的具体需求进行修改和调整。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=1663

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?