前言
有时候,我们并不想派生一个类(可能是因为懒,毕竟要写cpp和h文件,还要重写它的paintEvent
虚函数),可是父控件的paintEvent
并不是你想用就能用的,因为它只属于父控件;那有没有一种办法,可以在父控件的类里边实现子控件的绘图呢?
介绍
我们需要对Qt的事件机制比较熟悉,比如paintEvent,它本质是一个QEvent::paint
的事件;如果在事件队列里边拦截了QEvent::paint
,再进行QPainter
绘图,这个和paintEvent是一样的效果!
举例
这里的ui->dashboard1是一个QLabel
,我们打算侦听它的事件
1 | ui->dashboard1->installEventFilter(this); |
重写父控件的eventFilter
事件,侦听QEvent::Paint
事件
1 | bool MainWidget::eventFilter(QObject *obj, QEvent *evt) |
子控件绘图:这里可以加入自定义的效果
1 | void MainWidget::drawArc(QWidget *widget) |