前言
有时候,我们并不想派生一个类(可能是因为懒,毕竟要写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) |