Qt实用技巧:截屏功能的实现

简介: Qt实用技巧:截屏功能的实现

若该文为原创文章,未经允许不得转载

原博主博客地址:https://blog.csdn.net/qq21497936

原博主博客导航:https://blog.csdn.net/qq21497936/article/details/102478062

本文章博客地址:https://blog.csdn.net/qq21497936/article/details/79177272

各位读者,知识无穷而人力有穷,要么改需求,要么找专业人士,要么自己研究

红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…(点击传送门)

Qt开发专栏:实用技巧(点击传送门)

 

需求

       写一个截屏模块。

 

Demo

       下载地址: http://download.csdn.net/download/qq21497936/10226423

 

效果截图

图片.png

 

图片.png

 

图片.png

 

核心代码

初始化截屏窗口代码

    // 设置无边框
    setWindowFlags(windowFlags() | Qt::FramelessWindowHint);
    // 激活并全屏
    setWindowState(Qt::WindowActive | Qt::WindowFullScreen);
    // 抓取当前屏幕图片,使用QPixmap,Qt5.9.3会有提示信息
    // this function is deprecated, use QScreen::grabWindow() instead.
    // Defaulting to primary screen.
    _pixmapScreen = QPixmap::grabWindow(QApplication::desktop()->winId());
    _screenWidth = _pixmapScreen.width();
    _screenHeight = _pixmapScreen.height();

绘制代码

    QPainter painter(this);
    // 背景刷图
    QColor shadowColor = QColor(0, 0, 0, 100);
    painter.drawPixmap(0, 0, _pixmapScreen);
    painter.fillRect(_pixmapScreen.rect(), shadowColor);
    if(_bPressed)
    {
        QRect selectedRect(_pointStart, _pointEnd);
        // QRect允许负值,使用mormalized转化为正值
        selectedRect = selectedRect.normalized();
        // 截图黑框
        painter.setPen(QPen(Qt::black, 2));
        painter.drawRect(selectedRect);
        // 截图的rect,再次填充
        _pixmapCaptrueScreen = _pixmapScreen.copy(selectedRect);
        painter.drawPixmap(selectedRect.topLeft(), _pixmapCaptrueScreen);
    }

鼠标操作代码

void CaptureScreen::mousePressEvent(QMouseEvent *event)
{
    if(event->button() == Qt::LeftButton)
    {
        _bPressed = true;
        _pointStart = event->pos();
        _pointEnd = event->pos();
        update();
    }
}
void CaptureScreen::mouseMoveEvent(QMouseEvent *event)
{
    _pointEnd = event->pos();
    update();
}
void CaptureScreen::mouseReleaseEvent(QMouseEvent *event)
{
    if(event->button() == Qt::LeftButton)
    {
        _bPressed = false;
        _pointEnd = event->pos();
        update();
        emit capturePixmapFnished(true, _pixmapCaptrueScreen);
        close();
    }else{
        emit capturePixmapFnished(true, _pixmapCaptrueScreen);
        close();
    }
}


 

原博主博客地址: https://blog.csdn.net/qq21497936

原博主博客导航: https://blog.csdn.net/qq21497936/article/details/102478062

本文章博客地址: https://blog.csdn.net/qq21497936/article/details/79177272


相关文章
|
2月前
|
开发框架 Java 编译器
【Qt 元对象系统 01 】深入探索Qt的元对象系统:核心地位、功能与构成
【Qt 元对象系统 01 】深入探索Qt的元对象系统:核心地位、功能与构成
68 0
|
9月前
|
Linux API Windows
linux系统中利用QT实现蓝牙功能的方法
linux系统中利用QT实现蓝牙功能的方法
314 0
|
9月前
|
Linux
linux系统中利用QT实现音乐播放器的功能
linux系统中利用QT实现音乐播放器的功能
159 0
|
10月前
|
算法 C++
|
9月前
|
Ubuntu Linux API
linux系统中使用QT实现摄像头功能的方法
linux系统中使用QT实现摄像头功能的方法
162 0
|
9月前
|
存储 Linux
linux系统中使用QT实现多媒体的功能方法
linux系统中使用QT实现多媒体的功能方法
107 0
|
2月前
|
网络安全 C++ 索引
C++ Qt开发:TabWidget实现多窗体功能
`QTabWidget` 是Qt中用于实现标签页(tabbed interface)的控件,可以在一个窗口内切换不同的页面。在开发窗体应用时通常会伴随功能的分页,使用TabWidget并配合自定义Dialog组件,即可实现一个复杂的多窗体分页结构,此类布局方式也是多数软件通用的方案。
99 0
C++ Qt开发:TabWidget实现多窗体功能
|
8月前
|
Windows 存储 Cloud Native
C++Qt windows系统托盘增加图标和功能
C++Qt windows系统托盘增加图标和功能
|
数据可视化 C++
【变化检测】多时相遥感影像变化检测 Qt界面可视化 / 实现卷帘功能(附有完整代码)
【变化检测】多时相遥感影像变化检测 Qt界面可视化 / 实现卷帘功能(附有完整代码)

推荐镜像

更多