覆盖 QMessageBox::paintEvent()

Posted

技术标签:

【中文标题】覆盖 QMessageBox::paintEvent()【英文标题】:Overridding QMessageBox::paintEvent() 【发布时间】:2011-02-23 19:34:48 【问题描述】:

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

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】:

确定按钮没有被绘制。这是一个添加到消息框的子 QWidget。子控件的绘制不受父控件的paintEvent控制。

【讨论】:

以上是关于覆盖 QMessageBox::paintEvent()的主要内容,如果未能解决你的问题,请参考以下文章

白盒测试法:逻辑覆盖与路径覆盖

代码覆盖率VS测试覆盖率

覆盖率啥意思

软件测试 白盒测试 语句覆盖 判定覆盖

07-白盒测试方法-逻辑覆盖法

代码覆盖率是个啥概念?