覆盖QMessageBox :: paintEvent()

时间:2011-02-23 19:34:49

标签: c++ qt qt4

我正在为应用程序创建自定义消息框。我的对象派生自QMessageBox,但我重写了paintEvent()方法以更改其外观。奇怪的是,虽然我没有在派生方法中调用基础paintEvent方法,但默认情况下我的自定义消息框仍然用OK按钮绘制。这是我的代码:


class MessageWidget : public QMessageBox
{
    Q_OBJECT

public:

    MessageWidget(QWidget* parent = 0);
    ~MessageWidget();

    void setTitle(const QString& title);
    const QString& title() const;

protected:

    void paintEvent(QPaintEvent* event);
}

MessageWidget::MessageWidget(QWidget* parent) :
    QMessageBox(parent)
{
    setWindowFlags(Qt::FramelessWindowHint);
    setAutoFillBackground(true);
}

void MessageWidget::paintEvent(QPaintEvent* /*event*/)
{
    QPainter painter(this);
    QRect boxRect = rect();

    QPainterPath path;
    path.addRoundedRect(boxRect, 15, 15);
    painter.fillPath(path, palette().window());
    painter.drawPath(path);

    QRect titleRect = boxRect;
    int titleHeight = fontMetrics().height();
    titleRect.moveBottom(titleHeight);

    boxRect.moveTop(titleRect.bottom());
    painter.drawLine(titleRect.bottomLeft(), titleRect.bottomRight());

    painter.drawText(titleRect, Qt::AlignLeft, "Some Text");
}

当我没有调用基础paintEvent方法时,如何绘制其他东西?

1 个答案:

答案 0 :(得分:5)

“确定”按钮未被绘制。这是一个添加到消息框中的子QWidget。子窗口小部件绘制不在父级的paintEvent中控制。