绘图基础
http://qtdebug.com/Paint-Base.html
那是不是就是说,如果想在 magicLabel 上绘图,就必须新创建一个类例如叫 MagicLabel,并且继承自 QLabel,然后在它的 paintEvent() 里绘图?如果有 10 个子 widget,都想在上面画点啥,是不是每个 widget 都要对应创建一个类来实现绘图?我就是想画个圈而已,要创建这么多类也太麻烦了,真的想画个圈圈诅咒 Qt 啊。
莫急莫急,这里传大家本人秘藏多年的一绝技,就能在 PandoraWidget 的函数里给 magicLabel 绘图了:在事件过滤器 eventFilter()
中拦截 magicLabel 的QEvent::Paint
事件,用 magicLabel 创建 QPainter,就可以在 magicLabel 上绘图了,上代码,否则估计有人要把我画在圈圈里了:
PandoraWidget::PandoraWidget(QWidget *parent)
: QWidget(parent), ui(new Ui::PandoraWidget) {
ui->setupUi(this);
ui->magicLabel->installEventFilter(this);
}
bool PandoraWidget::eventFilter(QObject *watched, QEvent *event) {
if (watched == ui->magicLabel && event->type() == QEvent::Paint) {
magicTime();
}
return QWidget::eventFilter(watched, event);
}
void PandoraWidget::magicTime() {
QPainter painter(ui->magicLabel);
painter.setPen(Qt::gray);
painter.setBrush(Qt::green);
painter.drawRect(10, 10, 50, 50);
}