我创建了自己的自定义小部件类,代码如下:
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
不可见。
答案 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
才能使样式表正常工作。