自定义小部件在 WIdget 中不可见 window

Custom Widget is not visible in WIdget window

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

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 小部件 window 的子对象,但每当我 运行 程序时,我都不会在 window 但是当我转到顶部底部时,我可以看到我的 Entered 的控制台输出,所以它出现在我的 Widget window 中,但即使我设置了也看不到它背景颜色为绿色,如果我只是使用 Qt GUI 将一个 Widget 添加到表单中并设置背景颜色和 运行 代码,那么我的 Widget从 GUI 添加的是可见的,但我的 Widget 由我自己的自定义小部件创建的是不可见的。

在直接继承自QWidget的class中使用stylesheet似乎不​​行。我覆盖了程序的 paintEvent 方法以获得所需的输出。这是 paintEvent 代码,我在我的自定义小部件上添加了 class,

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

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