c++ qt 实现橡皮擦功能可以擦掉笔刷绘制的图像 您所在的位置:网站首页 橡皮擦了多少画 c++ qt 实现橡皮擦功能可以擦掉笔刷绘制的图像

c++ qt 实现橡皮擦功能可以擦掉笔刷绘制的图像

2024-06-16 21:53| 来源: 网络整理| 查看: 265

c++ qt 实现橡皮擦功能可以擦掉笔刷绘制的图像 作者:QT开发栏目:公开2023-05-27 03:131338

在C++ Qt中,可以通过设置QPainter的CompositionMode来实现橡皮擦功能。具体来说,我们可以将绘制模式设置为QPainter::CompositionMode_Clear,然后使用指定大小和形状的笔刷在画布上绘制,就能够清除指定区域的图像。

下面是一个简单的示例代码:

void DrawingWidget::erase(QPoint pos, int size) { QPainter painter(&image); painter.setCompositionMode(QPainter::CompositionMode_Clear); QBrush brush(Qt::black, Qt::SolidPattern); painter.setBrush(brush); QRect rect(pos.x() - size/2, pos.y() - size/2, size, size); painter.drawRect(rect); update(); }

在这个示例中,我们定义了一个名为erase()的函数,用于擦除画布上指定位置和大小的图像。首先,我们创建了一个QPainter对象,并将其绘制模式设置为CompositionMode_Clear。接着,我们创建了一个黑色填充、样式为实线的QBrush对象,并将其设置为当前画刷。最后,使用drawRect()函数绘制指定大小和位置的矩形,在画布上进行清除操作。

在使用该函数时,您只需要传入鼠标点击或移动事件捕获到的位置信息以及需要擦除区域的大小即可。例如,在mouseMoveEvent()函数中调用erase()函数可以这样写:

void DrawingWidget::mouseMoveEvent(QMouseEvent *event) { if ((event->buttons() & Qt::LeftButton) && isDrawing) { if (event->modifiers() & Qt::ControlModifier) { erase(event->pos(), 20); } else { QPainter painter(&image); QPen pen(Qt::black, 10, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin); painter.setCompositionMode(QPainter::CompositionMode_Source); painter.setPen(pen); QPoint currentPos = event->pos(); painter.drawLine(lastPoint, currentPos); lastPoint = currentPos; update(); } } }

在这个示例中,我们首先判断是否按下了Ctrl键。如果是,则调用erase()函数进行橡皮擦操作;否则,使用QPainter类实现笔刷功能并绘制线条。

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

QT开发 QT开发 管理员 分享: 扫描分享到社交APP 上一篇 qt实现电子开关串口仿真 下一篇 QMouseEvent 头文件 相关推荐 Qfile write 写 QString 变量 Qfile write 写 QString 变量

要将QString变量写入Qfile,请遵循以下步骤:创建QFile对象并打开文件,例如:QFilefile("path/to/file.txt");if(file.open(QIODevice::WriteOnly...

QT开发 QT开发 2024-06-16 23 0 0 qt如何成功报表 qt如何成功报表

Qt提供了一个名为QtCharts的模块,可以用于创建和显示各种类型的图表。下面是一些步骤,可以帮助你在Qt中成功生成报表:首先,在.pro文件中添加必要的模块依赖。请确保在项目文件中添加以下行:QT+=charts在你...

QT开发 QT开发 2024-06-15 28 0 0 Qt C++ 对指定QDialog增加边框 Qt C++ 对指定QDialog增加边框

在QtC++中,你可以使用QStyle来为指定的QDialog添加边框。下面是一个示例代码:#includeintmain(intargc,char*argv[]){QAppl...

QT开发 QT开发 2024-06-15 21 0 0 Qt C++ 样式文件 对指定QDialog增加边框 Qt C++ 样式文件 对指定QDialog增加边框

在QtC++中,你可以使用样式文件(.qss)来为指定的QDialog添加边框。以下是一个示例:#includeintmain(intargc,char*argv[]){QAp...

QT开发 QT开发 2024-06-15 23 0 0 QPushButton的 resize QPushButton的 resize

QPushButton是继承自QWidget的按钮类,可以使用resize()方法来调整其大小。resize()方法接受两个参数,即宽度和高度,用于指定按钮的新尺寸。以下是一个示例代码,展示如何使用resize()方法调整QPushBut...

QT开发 QT开发 2024-06-15 27 0 0 QDialog增加边框 QDialog增加边框

要为QDialog添加边框,你可以使用QWidget的样式表(StyleSheet)来设置边框属性。以下是一个示例代码:fromPyQt5.QtWidgetsimportQApplication,QDialogapp=QA...

QT开发 QT开发 2024-06-15 27 0 0 qt 把tableview 转换成csv文件 qt 把tableview 转换成csv文件

在Qt中,将TableView的数据转换为CSV文件可以通过以下步骤实现:获取TableView的模型数据:QAbstractItemModel*model=tableView->model();打开要写入的CSV...

QT开发 QT开发 2024-06-15 30 0 0 将QPushButton加入QGraphicsProxyWidget控件中 将QPushButton加入QGraphicsProxyWidget控件中

要将QPushButton添加到QGraphicsProxyWidget控件中,您可以执行以下步骤:创建一个QGraphicsScene对象作为场景,并将其设置为视图的场景。QGraphicsScenescene;view.se...

QT开发 QT开发 2024-06-15 26 0 0 moveToThread moveToThread

moveToThread()是Qt中的一个函数,用于将一个对象移到指定的线程中执行。这个函数常用于在多线程应用程序中将耗时操作放到单独的线程中执行,以避免阻塞主线程。以下是moveToThread()的使用示例:#includ...

QT开发 QT开发 2024-06-15 28 0 0 deleteButtQT 去掉QGraphicsProxyWidget 自带的灰色背景on deleteButtQT 去掉QGraphicsProxyWidget 自带的灰色背景on

要去掉QGraphicsProxyWidget自带的灰色背景,您可以重写其paint()方法,并在其中绘制自定义的背景。以下是一个示例代码,展示如何删除QGraphicsProxyWidget默认的灰色背景:classCustomP...

QT开发 QT开发 2024-06-15 22 0 0 发表列表 评论列表

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



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有