gpt4 book ai didi

c++ - 将小部件添加到布局仅适用于自定义类的构造函数

转载 作者:行者123 更新时间:2023-11-30 05:26:01 26 4
gpt4 key购买 nike

我有一个类 MainWindow 是 QMainWindow 的子类。作为中央小部件,我有一个 QScrollArea,里面有一个 QWidget,作为我自己的自定义小部件的容器。我将 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 对象。

可能是什么问题?

编辑:我刚刚注意到稍后添加小部件(不是在构造函数中)会使构造函数中添加的小部件消失。

最佳答案

如果父小部件已经可见,则必须显式显示任何添加为子小部件的小部件。通常,子控件在父控件显示之前添加,然后它们自己也变得可见。但如果您稍后添加它们,则必须使它们明确可见。

关于c++ - 将小部件添加到布局仅适用于自定义类的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38013139/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com