我有一个类MainWindow子类化QMainWindow。作为中央窗口小部件,我有一个内部带有QWidget的QScrollArea,作为我自己的自定义窗口小部件的容器。我将QVBoxLayout设置为QWidget容器的布局,并将此布局传递给我的自定义类的构造函数,该构造函数应动态创建我的自定义小部件类的实例并将其添加到布局中。
class MainWindow : public QMainWindow {
Q_OBJECT
public:
MainWindow(QWidget *parent = Q_NULLPTR);
virtual ~MainWindow ();
private:
QVBoxLayout mainLayout;
QScrollArea scrollArea;
QWidget container;
NotificationControl control;
};
MainWindow::MainWindow (QWidget *parent) :
QMainWindow(parent),
container(&scrollArea),
control(&mainLayout) {
container.setLayout(&mainLayout);
scrollArea.setWidget(&container);
setCentralWidget(&scrollArea);
}
现在在我的NotificationControl类中,有一个方法addNotification:
void NotificationControl::addNotification (Notification notif) {
qDebug() << "NotificationControl addNotification" << notif.get_app_name();
NotificationWidget* widget = new NotificationWidget(notif);
container->addWidget(widget);
}
调用此方法时,我得到了调试输出,但是没有任何内容添加到布局中。但是如果我将其添加到NotificationControl的构造函数的末尾...
NotificationWidget* notif = new NotificationWidget(Notification());
container->addWidget(notif);
...由于某种原因它起作用了。我很确定问题不是NotificationWidget类。为了进行测试,我进行了一些更改,它实际上并没有使用通过的Notification对象。
可能是什么问题呢?
编辑:我只是注意到以后再添加小部件(不在构造函数中)会使在构造函数中添加的小部件消失。
如果父窗口小部件已经可见,则必须显式显示添加为子窗口小部件的任何窗口小部件。通常,在显示父窗口小部件之前先添加子窗口小部件,然后它们自己也将变为可见。但是,如果以后添加它们,则必须使它们显式可见。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句