QWidget派生类不可见。

6

我可以在主窗口类的一个函数中创建并查看一个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 写的唯一代码。很容易重现这种情况。但我会在问题中添加完整的源代码。 - sithereal
1个回答

4
您可以重写 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一样运作。 - sithereal
我认为这是一个bug。只有QWidget会出现这种奇怪的行为。如果你创建另一种类型的小部件,比如QTextEdit或QPushButton,它们将会像原始类一样表现。 - Lwin Htoo Ko
1
如果您直接从QWidget对象派生您的类,并希望应用一些样式表标签来自定义界面,您会发现您的样式表设置将不起作用。仅仅像下面这样设置背景颜色的简单样式表标签将没有任何效果: - user3528438

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接