“自定义小部件”在WIdget窗口中不可见

时间:2020-07-27 12:57:52

标签: qt qt5 qwidget

我创建了自己的自定义小部件类,代码如下:

class myWidget : public QWidget
{
    Q_OBJECT
public:
    explicit myWidget(QWidget*parent=nullptr): QWidget(parent){}
    void enterEvent(QEvent *event) override
    {
        Q_UNUSED(event);
        qDebug()<<"Entered";
    }
};

widget.cpp中,我创建了它的实例,如下所示

myWidget *w;

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    w=new myWidget(this);
    w->setStyleSheet("background-color: rgb(138, 226, 52);");
    w->setGeometry(10,10,100,100);
    w->show();
}

您可以看到我的对象是this小部件窗口的子级,但是每当我运行该程序时,它在窗口中就看不到,但是当我转到顶部底部时,我可以看到控制台输出Entered我的Widget窗口中显示了它,但是即使我将背景色设置为绿色,也无法看到它,如果我只使用Qt GUI在表单中添加一个Widget并设置背景色并运行代码,然后可以看到我从GUI添加的Widget,但是我自己的自定义小部件创建的Widget不可见。

2 个答案:

答案 0 :(得分:0)

在直接继承自stylesheet的类中使用QWidget似乎无效。我重写程序的paintEvent方法以获得所需的输出。这里是paintEvent代码,我在自定义窗口小部件类中添加了

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

答案 1 :(得分:0)

我认为您的类必须继承自QFrame而不是QWidget才能使样式表正常工作。