用鼠标实现屏幕绘图

    一般说来,在屏幕上绘图,许多朋友首先想到的是先抓取屏幕图形到窗口,然后在窗口中进行绘图,这种思路最大的缺点是,当窗口切换时,会出现明显的闪烁现象(因为屏幕抓图和应用程序窗口再置顶这些操作比较费时),有没有更好的解决办法,从而实现更快捷的屏幕绘图呢?

    其实,既然窗口支持半透明,为什么不利用此特点,创建一个置顶的接近完全透明的窗口,然后再在此窗口内绘图呢?为此,我写下了这个代码,经测试,基本达到了设计目的:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个简单的 Qt 绘图板示例,演示了如何使用颜色填充: ```cpp #include <QtWidgets> class DrawingWidget : public QWidget { public: DrawingWidget(QWidget *parent = nullptr); protected: void paintEvent(QPaintEvent *event) override; void mousePressEvent(QMouseEvent *event) override; private: QPointF m_lastPoint; QColor m_currentColor; QImage m_image; }; DrawingWidget::DrawingWidget(QWidget *parent) : QWidget(parent) , m_currentColor(Qt::black) , m_image(400, 400, QImage::Format_RGB32) { m_image.fill(Qt::white); } void DrawingWidget::paintEvent(QPaintEvent *event) { QPainter painter(this); painter.drawImage(0, 0, m_image); } void DrawingWidget::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { m_lastPoint = event->pos(); QPainter painter(&m_image); painter.setPen(m_currentColor); painter.drawPoint(m_lastPoint); update(); } else if (event->button() == Qt::RightButton) { QColor fillColor = QColorDialog::getColor(m_currentColor, this, "Choose Fill Color"); if (fillColor.isValid()) { QPainter painter(&m_image); painter.setPen(fillColor); painter.setBrush(fillColor); painter.fillRect(m_image.rect(), fillColor); update(); } } } int main(int argc, char *argv[]) { QApplication app(argc, argv); DrawingWidget widget; widget.show(); return app.exec(); } ``` 在这个示例中,我们在 `DrawingWidget` 类中实现绘图功能。我们在 `paintEvent` 函数中绘制了一个 `QImage` 对象,它保存了我们绘制的内容。我们使用 `mousePressEvent` 函数来响应鼠标事件,根据鼠标按键的不同,我们可以选择在画布上绘制点或者填充颜色。 在右键点击画布时,我们使用 `QColorDialog::getColor` 函数来让用户选择填充颜色。然后我们使用 `QPainter` 对象的 `fillRect` 函数来填充整个画布。注意,我们同时设置了画笔和画刷的颜色,这样可以保证填充的颜色和边框颜色一致。 在 `DrawingWidget` 的构造函数中,我们初始化了一个 400x400 的白色 `QImage` 对象,作为我们的画布。在 `mousePressEvent` 函数中,我们使用了 `QPainter` 对象来绘制点和填充颜色。最后,我们在 `paintEvent` 函数中将 `QImage` 对象绘制到屏幕上。 这是一个非常简单的示例,你可以根据自己的需要进行扩展,例如添加更多的绘图工具、支持多种颜色、保存/加载绘图等等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值