为什么有人会将drawEvent()覆盖为drawPrimitive?

时间:2010-12-22 23:48:19

标签: c++ qt4

此paintEvent覆盖的重点是什么:

void QWidgetDerivedWhatchamit::paintEvent(QPaintEvent *)
{
    QStyleOption opt;
    opt.init(this);
    QPainter p(this);
    style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}

当然QWidget已经做了什么?

3 个答案:

答案 0 :(得分:1)

有人想写这段代码有两个主要原因。

1)他们想要在小部件的背景中绘制/写东西或使用图像。在这种情况下,他们必须实现paintEvent方法。

2)他们希望利用Qt样式表,例如在窗口小部件上设置透明背景。样式表可以与QLabel或QPushButton等内置类一起使用。但是,如果某人创建了自己的类,派生自QWidget,除非重新实现paintEvent并准确写出您提到的那些行,否则Stylesheets不会工作。

答案 1 :(得分:0)

可能。它可能是一个占位符,即。开发人员打算覆盖它以添加一个新功能,但没有解决它并离开上面。另外,基类中paintEvent的默认行为是什么?它是PE_Widget,还是其他什么?

答案 2 :(得分:0)

如果你派生自QWidget,你不应该这样做。忘了你曾经看过那段代码:)