自定义小部件在 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
才能使样式表正常工作。
我已经创建了自己的自定义小部件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
才能使样式表正常工作。