我正在为应用程序创建自定义消息框。我的对象派生自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方法时,如何绘制其他东西?
答案 0 :(得分:5)
“确定”按钮未被绘制。这是一个添加到消息框中的子QWidget。子窗口小部件绘制不在父级的paintEvent中控制。