Qt学习笔记(1)---QT5利用事件过滤器实现在控件上绘图
来源:互联网 发布:2016年网络流行词汇 编辑:程序博客网 时间:2024/06/05 19:32
首先,感谢 作者:一去丶二三里 博客地址:http://blog.csdn.net/liang19890820
Qt中要在控件中绘制图像,需要重写paintevent函数,本文通过EventFilter(事件过滤器)来实现在控件上的图形绘制。
.h文件
#ifndef WIDGET_H#define WIDGET_H#include <QWidget>#include <QPointF>namespace Ui {class Widget;}class Widget : public QWidget{ Q_OBJECTpublic: explicit Widget(QWidget *parent = 0); ~Widget();public slots: bool eventFilter(QObject *, QEvent *);private: Ui::Widget *ui; bool mouseIsdown; QPointF startPos; QPointF endPos;};#endif // WIDGET_H.cpp文件
#include "widget.h"#include "ui_widget.h"#include <QPainter>#include <QMouseEvent>Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget){ ui->setupUi(this); mouseIsdown = false; ui->label->installEventFilter(this);}Widget::~Widget(){ delete ui;}bool Widget::eventFilter(QObject *watched, QEvent *event){ if(watched == ui->label ) { if(event->type() == QEvent::MouseButtonPress) { QMouseEvent *mouseEvent=(QMouseEvent *)event; if(mouseEvent->buttons()&Qt::LeftButton) { mouseIsdown = true; startPos = mouseEvent->pos(); } } if(event->type() == QEvent::MouseMove) { QMouseEvent *mouseEvent=(QMouseEvent *)event; if(mouseIsdown) { endPos = mouseEvent->pos(); ui->label->update(); } } if(event->type() == QEvent::MouseButtonRelease) { QMouseEvent *mouseEvent=(QMouseEvent *)event; endPos = mouseEvent->pos(); mouseIsdown = false; } if(event->type() == QEvent::Paint) { QPainter painter(ui->label); QPen pen = painter.pen(); pen.setWidth(3); pen.setColor(QColor(173, 255, 47)); //反走样 painter.setRenderHint(QPainter::Antialiasing, true); painter.setPen(pen); // 绘制直线 painter.drawLine(startPos, endPos); } } return QWidget::eventFilter(watched,event);}
eventFilter(QObject *watched, QEvent *event)中
watched为事件过滤器的对象即本文中的label , event 为事件类型。
其中需要注意的有两点:
1.在构造函数中添加过滤器installEventFilter(this)如果一个控件添加了多个过滤器,后添加会被选择执行。
2.返回父类的eventfliterreturn QWidget::eventFilter(watched,event);
0 0
- Qt学习笔记(1)---QT5利用事件过滤器实现在控件上绘图
- Qt5 在控件中绘图
- Qt5基础(六)实现Qt文本编辑功能学习笔记
- QT5 学习之路22---事件过滤器
- 在static控件上绘图(一)
- Qt 在控件中绘图
- QT之GUI学习笔记(十七)---事件过滤器
- QT学习 之 事件与事件过滤器
- 学习笔记1--在Qt5中利用OpenGL渲染一个立方体
- Qt5学习笔记(1)
- Qt 学习之路 2(21):事件过滤器
- 如何在Qt中安装事件过滤器
- Qt5基础(三)Qt登录对话框学习笔记
- Qt 在控件上面绘图 label,pushbutton。。。。。
- Qt 在控件上面绘图 label,pushbutton。。。。。
- Qt学习之路(22): 事件过滤器
- Qt学习之路(22): 事件过滤器
- Qt学习之路(22): 事件过滤器
- bzoj 3489: A simple rmq problem (KD-tree)
- 安卓模拟器配置了摄像头还是显示黑白棋盘
- bug宝典JAVA篇 BeanUtils.copyProperties 日期问题
- Leetcode Add Two Numbers II
- 如何使用ocilib进行oracle8的读取
- Qt学习笔记(1)---QT5利用事件过滤器实现在控件上绘图
- android工程生成jar包
- 地图API和androidSDK版本高了和低版本有没有冲突
- Shared Library Search Paths
- 安卓开源框架android-async-http-master最新版的应该怎么用啊,求大神指导
- 2016总结,真正新的里程碑和新起点
- 程序猿的机器学习之路-1-Numpy基础:创建多维数组
- 课程设计之学生成绩管理系统
- android 获取其他app启动次数和运行时间