为什么推广后QWidget会消失?

时间:2014-10-04 14:36:11

标签: c++ qt qt4 qt5 qwidget

我有3个小部件的层次结构:

enter image description here

每个小部件都将背景颜色更改为不同的颜色(使用QSS),以便输出如下所示:

enter image description here

这里一切都很好。但是,如果我将widget提升为从QWidget派生的类,它会像这样消失:

enter image description here

enter image description here

这是我的Custom小部件的代码:

custom.h:

#ifndef CUSTOM_H
#define CUSTOM_H

#include <QWidget>

class Custom : public QWidget
{
    Q_OBJECT
public:
    explicit Custom(QWidget *parent = 0);
};

#endif // CUSTOM_H

custom.cpp:

#include "custom.h"

Custom::Custom(QWidget *parent) :
    QWidget(parent)
{
}

任何人都可以解释为什么这些奇怪的事情会发生,我该怎样做才能让绿色小部件出现?

2 个答案:

答案 0 :(得分:2)

前段时间我已回答a similar question:)

为了让qss样式表适用于直接QWidget子类,您应该像这样实现paintEvent

void Custom::paintEvent(QPaintEvent *)
{
    QStyleOption opt;
    opt.init(this);
    QPainter p(this);
    style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}

答案 1 :(得分:-1)

对于QLineEdit,记得像这个构造函数一样调用/继承基类

QLineEdit_KPE::QLineEdit_KPE(QWidget *parent) : 
QLineEditt(parent)
{
}