【问题标题】:Custom Widget is not visible in WIdget window自定义小部件在 WIdget 窗口中不可见
【发布时间】:2020-07-28 00:14:19
【问题描述】:

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

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 不可见。

【问题讨论】:

  • 尝试在您的自定义小部件中绘制一些东西

标签: qt qt5 qwidget


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-09
      • 2022-11-27
      • 1970-01-01
      相关资源
      最近更新 更多