为了做出一个QQ截图功能的模块,参考了网上某位网友的代码。这里我们分析一下主要代码。
源码已经过测试运行,不懂的留言即可。
源码地址:Qtjietu20191216.zip
1.首先我们一定会想到要对鼠标事件进行改写,包括点击,移动,释放,双击取消选区等功能。
```
//重写基类方法
void keyPressEvent(QKeyEvent *event);
void paintEvent(QPaintEvent *event);
void mousePressEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void mouseDoubleClickEvent(QMouseEvent *event);
void contextMenuEvent(QContextMenuEvent *event);
```
2.我们肯定需要一个背景,然后可以在这个背景控件上去画我们的截屏框,这里我们就清楚了,首先点击截图按钮,触发创建一个全屏的widget,背景设置成透明暗色的,然后根据鼠标点的移动去绘制一个矩形框框,作为选区,然后鼠标释放的时候,或者鼠标右键点击的时候,出现保存选区菜单,最后将选区保存为一张图片即可。
```
void fullScreenWidget::loadBackgroundPixmap(const QPixmap &bgPixmap)
{
int width,height;
width = QApplication::desktop()->size().width();
height = QApplication::desktop()->size().height();
loadBackgroundPixmap(bgPixmap,0,0,width,height);
}
void fullScreenWidget::loadBackgroundPixmap(const QPixmap &bgPixmap, int x, int y, int width, int height)
{
loadPixmap = bgPixmap;
screenx = x;
screeny = y;
screenwidth = width;
screenheight = height;
initFullScreenWidget();
}
```
3.中间的难点就是如何将选区生成图片,以及计算一下鼠标的移动位置了。
```
QPixmap fullScreenWidget::getFullScreenPixmap()
{
initFullScreenWidget();
QPixmap result = QPixmap();
result = QPixmap::grabWindow(QApplication::desktop()->winId()); //抓取当前屏幕的图片
return result;
}
```
完整代码经运动通过,在Qt5.10上成功的。
有问题请留言。
原文地址:https://www.cnblogs.com/xcdm2018/p/12050180.html