• 15041阅读
  • 15回复

在QWidget上用鼠标画方框 [复制链接]

上一主题 下一主题
离线jdwx
 

只看楼主 正序阅读 楼主  发表于: 2013-04-01
— 本帖被 XChinux 执行加亮操作(2016-04-23) —
如何在QWidget上用鼠标方框
很简单,只是为初学者提供一个最基本的鼠标画图的例子,代码很少很容易看懂。
直接上代码,附件里有全部的代码下载,这里只显示主要的部分
win7 + Qt5 + VS2010,编译运行。


  1. #ifndef WIDGET_H
  2. #define WIDGET_H
  3. #include <QWidget>
  4. namespace Ui {
  5. class Widget;
  6. }
  7. class Widget : public QWidget
  8. {
  9.     Q_OBJECT
  10. public:
  11.     explicit Widget(QWidget *parent = 0);
  12.     ~Widget();
  13. protected:
  14.     void mousePressEvent(QMouseEvent *e);
  15.     void mouseMoveEvent(QMouseEvent *e);
  16.     void mouseReleaseEvent(QMouseEvent *e);
  17.     void paintEvent(QPaintEvent *);
  18. private slots:
  19. private:
  20.     Ui::Widget *ui;
  21.     bool m_isDown;
  22.     QPoint m_start;
  23.     QPoint m_stop;
  24. };
  25. #endif // WIDGET_H
  1. #include "widget.h"
  2. #include "ui_widget.h"
  3. #include <QtWidgets>
  4. Widget::Widget(QWidget *parent) :
  5.     QWidget(parent),
  6.     ui(new Ui::Widget)
  7. {
  8.     ui->setupUi(this);
  9.     m_isDown = false;
  10. }
  11. Widget::~Widget()
  12. {
  13.     delete ui;
  14. }
  15. void Widget::mousePressEvent(QMouseEvent *e)
  16. {
  17.     if(e->button() && Qt::LeftButton){
  18.         m_isDown = true;
  19.         m_start = e->pos();
  20.         m_stop = e->pos();
  21.     }
  22. }
  23. void Widget::mouseMoveEvent(QMouseEvent *e)
  24. {
  25.     if(m_isDown){
  26.         m_stop = e->pos();
  27.     }
  28.     update();
  29. }
  30. void Widget::mouseReleaseEvent(QMouseEvent *e)
  31. {
  32.     if(e->button() && Qt::LeftButton){
  33.         m_isDown = false;
  34.     }
  35. }
  36. void Widget::paintEvent(QPaintEvent *)
  37. {  
  38.     if(!m_isDown){
  39.         return;
  40.     }
  41.     QPainter p(this);
  42.     p.drawRect(QRect(m_start,m_stop));
  43. }










附件: drawrect.rar (2 K) 下载次数:173
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
在线liulin188

只看该作者 15楼 发表于: 2019-04-14
https://wiki.qt.io/Qt_5.12_Release
https://wiki.qt.io/New_Features_in_Qt_5.12
https://wiki.qt.io/Qt_5.12.0_Known_Issues
https://www.qt.io/blog/qt-5.13.2-released
https://www.qt.io/blog/qt-creator-4.10.2-released
https://wiki.qt.io/Qt_5.12_Tools_and_Versions
离线yk910127

只看该作者 14楼 发表于: 2017-09-08
学习中        
离线z609932088

只看该作者 13楼 发表于: 2015-11-10
学习了
有阳光的地方就是青春
离线stillelx

只看该作者 12楼 发表于: 2015-07-29
代码简单明了,相当棒,学习了
离线hjm1990818

只看该作者 11楼 发表于: 2015-06-07
很好的例子,谢谢
离线cizer

只看该作者 10楼 发表于: 2015-05-24
谢谢分享
离线shannon

只看该作者 9楼 发表于: 2014-10-15
谢谢~
离线枪恋吧

只看该作者 8楼 发表于: 2014-10-09
个最基本的鼠标画图的例子,代码很少很容易看懂。
直接上代码,附件里有全部的
离线shayueqing

只看该作者 7楼 发表于: 2014-09-30
离线sinprog

只看该作者 6楼 发表于: 2013-11-20
双缓冲绘图
离线dqynet

只看该作者 5楼 发表于: 2013-05-03
编译不过去
向往的生活
离线neil-wen

只看该作者 4楼 发表于: 2013-04-26
不错  ,值得学习
离线qusiba111qu
只看该作者 3楼 发表于: 2013-04-26
xiexiefenxiang
离线sunkg
只看该作者 2楼 发表于: 2013-04-17
不错,谢谢
离线xsjqqq123

只看该作者 1楼 发表于: 2013-04-01
我觉得画箭头比较实用,可以用来做PPT
快速回复
限100 字节
 
上一个 下一个