在QDockWidget
派生类中我enable style sheet支持如下:
void CDockWidget::paintEvent(QPaintEvent *event)
{
QStyleOption opt;
opt.initFrom(this);
QPainter p(this);
this->style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
// call QDockWidget::paintEvent(event) here ???????
// I have called QDockWidget::paintEvent(event) here, but did not notice any difference
}
问题:我是否必须调用父类paintEvent
或者这是错误的(如果是这样请详细说明)。在原始code example中,父函数被 NOT 调用,但我想知道这是否正确?它会错过那里的任何功能,不会吗?
备注:上面的代码允许使用带有派生类的样式表,如下所述: Qt stylesheet in derived class in C++ namespace (selector)
答案 0 :(得分:2)
这就是QDockWidget内部的作用。您的布局管理似乎不会在当前代码中发生。我希望您可以通过调整窗口大小或调整布局的类似内容来查看问题。
void QDockWidget::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event)
QDockWidgetLayout *layout
= qobject_cast<QDockWidgetLayout*>(this->layout());
bool customTitleBar = layout->widgetForRole(QDockWidgetLayout::TitleBar) != 0;
bool nativeDeco = layout->nativeWindowDeco();
if (!nativeDeco && !customTitleBar) {
QStylePainter p(this);
// ### Add PixelMetric to change spacers, so style may show border
// when not floating.
if (isFloating()) {
QStyleOptionFrame framOpt;
framOpt.init(this);
p.drawPrimitive(QStyle::PE_FrameDockWidget, framOpt);
}
// Title must be painted after the frame, since the areas overlap, and
// the title may wish to extend out to all sides (eg. XP style)
QStyleOptionDockWidgetV2 titleOpt;
initStyleOption(&titleOpt);
p.drawControl(QStyle::CE_DockWidgetTitle, titleOpt);
}
}