在图形编辑应用中常会用到橡皮筋线,如选择图形的某个区域等,最常见的就是在系统桌面上用鼠标拖动,可以绘制一个类似蚂蚁线的选区,并且选区线能够跟随鼠标的移动而伸缩,因此叫作橡皮筋线。

qt 中用于描绘橡皮筋线的类是QRubberBand,当然单有一个QRubberBand 类还是不能做出橡皮筋的效果出来, 另外还要有鼠标事件的配合,与QRubberBand 配合的鼠标事件有 鼠标单击,拖动及释放,自己定义一个橡皮筋的类Rubber 如下所示:

class Rubber :  public QWidget
{
    Q_OBJECT
public:
    Rubber(QWidget *parent);
    ~Rubber();
   void mousePressEvent(QMouseEvent *);
   void mouseMoveEvent(QMouseEvent *);
   void mouseReleaseEvent(QMouseEvent *);

private:
   QRubberBand *rubberBand;
   QPoint origin;
};

在头文件中申明了构造函数和析构函数,及相应的鼠标响应事件, 将QRubberBand 设为私有对象,origin 用来保存鼠标单击时的坐标位置。

#include "rubber.h"
Rubber::Rubber(QWidget *parent)
{setParent(parent);this->setBackgroundRole(QPalette::Light);this->setAutoFillBackground(true);
    resize(400,360);setWindowTitle("Rubber");rubberBand = NULL;
}
构造函数完成了对窗体尺寸及背景的设置。
void Rubber::mousePressEvent(QMouseEvent *e)
{origin = e->pos();if(!rubberBand)rubberBand = new QRubberBand(QRubberBand::Rectangle,this);rubberBand->setGeometry(QRect(origin,QSize()));rubberBand->show();
}

鼠标在窗体中按下时,创建一个QRubberBand 类,QRubberBand::Rectangle 是设置橡皮筋线的类型,这种线的效果是描绘了一个方形的区域,还有一种是QRubberBand::Line,则为一个被直线填满的方形区域,相当于一个阴影的方形区域。QRubberBand 应用最多的函数是 setGeometry(),其作用是设置了橡皮筋线的位置及大小。

在鼠标按下,并且鼠标发生移动的时候,这时就可以会出橡皮线的区域,鼠标拖动事件函数重载如下 改区域的大小由QRect(origin,e->pos()).normalized()) 来体现, 其中normalized() 函数返回的也是一个QRect的对象,不过该对象的长和宽的值都是大于零时值

void Rubber::mouseMoveEvent(QMouseEvent *e)
{if(rubberBand)rubberBand->setGeometry(QRect(origin,e->pos()).normalized());
}
当鼠标松开时,橡皮筋线就可以隐藏了
void Rubber::mouseReleaseEvent(QMouseEvent *e)
{if(rubberBand)rubberBand->hide();
}

qt中橡皮筋类 QRubberBand相关推荐

  1. 橡皮筋类 QRubberBand

    最近在利用Qt的QRubberBand类绘制矩形框.QRubberBand可以实现橡皮筋框选取,即便是QRubberBand::Line,但是QRubberBand类只能绘制水平或垂直的线,不能绘制3 ...

  2. 【Qt】Qt中QJsonDocument 类

    00. 目录 文章目录 00. 目录 01. QJsonDocument类简介 02. 公有类型 03. 公有成员方法 04. 静态公有成员 05. 复杂Json生成和解析 06. 附录 01. QJ ...

  3. 【Qt】Qt中QJsonObject类

    00. 目录 文章目录 00. 目录 01. QJsonObject类简介 02. 公有类型 03. 公有成员方法 04. 公有成员方法解析 05. 参考示例 06. 附录 01. QJsonObje ...

  4. 【Qt】Qt中QJsonArray类

    00. 目录 文章目录 00. 目录 01. QJsonArray类简介 02. QJsonArray成员方法 03. QJsonArray成员方法解析 04. 参考示例 05. 附录 01. QJs ...

  5. 【Qt】Qt中QJsonValue类

    00. 目录 文章目录 00. 目录 01. QJsonValue类介绍 02. QJsonValue成员方法 03. QJsonValue成员方法介绍 04. 附录 01. QJsonValue类介 ...

  6. 【Qt】Qt中QJsonParseError类

    00. 目录 文章目录 00. 目录 01. QJsonParseError简介 02. QJsonParseError成员函数 03. 附录 01. QJsonParseError简介 QJsonP ...

  7. C++ Qt中其他类调用窗口中的ui控件

    目录 前言 方法 1 其他类必须继承QWidegt及其派生类 2 将主窗口UI公有化 3 定义一个静态的Widget指针 4 将mywidget指针中的ui指针传给UiOperationDlg.h中我 ...

  8. Qt中基类widget的各个事件函数中包含了ignore()的调用

    void My_Label:: mousePressEvent(QMouseEvent* e){qDebug()<<"子控件按下了";// e->ignore() ...

  9. QT中图表类QChart之各种缩放/平移

    1.使用QChartView来缩放 (1)用鼠标框选一个矩形,把图放大到这个矩形 QChartView::setRubberBand(QChartView::RectangleRubberBand); ...

最新文章

  1. 【Dual-Path-RNN-Pytorch源码分析】loss函数:SI-SNR
  2. 老雷socket编程之PHP利用socket扩展实现聊天服务
  3. 《CCNP SWITCH 300-115认证考试指南》——1.3节模块化网络的设计
  4. [日常折腾之码上归一]多种编程语言打印当前系统时间
  5. VTK:Texture之TextureCutSphere
  6. 终端命令运行php文件路径,PHP -S命令 PHP内置web服务器
  7. jquery-待办事列表-待整理
  8. bat执行java文件_.bat文件执行java程序
  9. centos 7 安装和配置vncserver
  10. Oracle创建数据库出错,oracle 10g dbca创建数据库出错 急急急
  11. R语言学习历程回顾总结
  12. Eplan p8 v2.7安装不上加密狗驱动
  13. Keil MDK5的安装及破解详细步骤
  14. mysql 加锁 索引_一条简单的更新语句,MySQL是如何加锁的?
  15. 革命性的超级WiFi - 电视白空间解释说
  16. 联筑赚:2021年1月份全国盘扣脚手架PMI为32.0%
  17. 移动端中的vMin和vMax
  18. js获取服务器时间,并以北京时区显示
  19. Composer -- PHP依赖管理的新时代
  20. 【优化求解】基于秃鹰算法BES求解最优目标matlab代码

热门文章

  1. Linux上添加路由,删除路由,修改路由配置(route add, route del, 路由表项基本知识)
  2. 使用ViewFlipper实现屏幕切换动画效果
  3. 2015初三计算机考试题答案,2015初中生计算机考试年试题及答案.doc
  4. HTML标签学习记录
  5. 必须知道的linux命令,29 个你必须知道的 Linux 命令
  6. python实现ftp
  7. 【异常解决】jxl.write.biff.JxlWriteException: Attempt to modify a referenced format
  8. 查看电脑最多支持内存
  9. 周赛西北第二次周赛(感谢佳神的讲解)
  10. 学C++还是学Java?做软件研发还需掌握哪些知识和技能?