覆盖 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()的主要内容,如果未能解决你的问题,请参考以下文章