QWidget 派生类不可见
Posted
技术标签:
【中文标题】QWidget 派生类不可见【英文标题】:QWidget derived class is not visible 【发布时间】:2011-11-23 17:30:01 【问题描述】:我可以在主窗口类的功能之一中创建并查看 QWidget:
..
// ok
QWidget *w = new QWidget(this);
w->setGeometry(400,300,400,300);
w->setStyleSheet("background-color:white;");
w->show();
..
但是当我尝试通过创建另一个派生自 QWidget 的类来做类似的事情时,我什么也看不到:
class MyWidget : public QWidget
public:
MyWidget(QWidget *sParent):QWidget(sParent)
;
..
// nothing visible happens.
MyWidget *w = new MyWidget(this);
w->setGeometry(400,300,400,300);
w->setStyleSheet("background-color:white;");
w->show();
..
这可能是什么原因?
注意:关于这个问题的一切:http://pastebin.com/haCHfqnu
【问题讨论】:
这就像唯一的代码 Dave。很容易重现这种情况。但我正在添加完整的问题来源。 【参考方案1】:你可以重写paintEvent。
void MyWidget::paintEvent(QPaintEvent *event)
QWidget::paintEvent(event);
QStyleOption opt;
opt.init(this);
QPainter p(this);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
我认为这会解决问题。
【讨论】:
但我不明白:当我从 QWidget 派生 MyWidget 时,我没有覆盖 QWidget 的任何函数。基本上这意味着将调用函数的基类版本。所以它应该和普通的 QWidget 完全一样 我认为这是一个错误。只有 QWidget 有这种奇怪的行为。如果您创建其他的小部件国王,如 QTextEdit 或 QPushButton,它们的行为将与原始类一样。 这里有一些解释:falsinsoft.blogspot.com/2015/02/… "如果你直接从 QWidget 对象派生你的类,并且想为自定义界面应用一些样式表标签,你会发现你的样式表设置不起作用。只是一个简单地设置背景颜色的样式表标签如下不会有任何效果:"以上是关于QWidget 派生类不可见的主要内容,如果未能解决你的问题,请参考以下文章