gpt4 book ai didi

c++ - QWidget::setLayout: 试图在 Widget ""上设置 QLayout "",它已经有一个布局

转载 作者:IT老高 更新时间:2023-10-28 22:36:01 25 4
gpt4 key购买 nike

我正在尝试通过代码(不是在 Designer 中)手动设置小部件的布局,但我做错了,因为我收到了以下警告:

QWidget::setLayout: Attempting to set QLayout "" on Widget "", which already has a layout

而且布局也很乱(标签在顶部,而不是底部)。

这是重现问题的示例代码:

Widget::Widget(QWidget *parent) :
QWidget(parent)
{
QLabel *label = new QLabel("Test", this);
QHBoxLayout *hlayout = new QHBoxLayout(this);
QVBoxLayout *vlayout = new QVBoxLayout(this);
QSpacerItem *spacer = new QSpacerItem(40, 20, QSizePolicy::Fixed);
QLineEdit *lineEdit = new QLineEdit(this);
hlayout->addItem(spacer);
hlayout->addWidget(lineEdit);
vlayout->addLayout(hlayout);
vlayout->addWidget(label);
setLayout(vlayout);
}

最佳答案

所以我相信你的问题出在这一行:

QHBoxLayout *hlayout = new QHBoxLayout(this);

特别是,我认为问题在于将 this 传递到 QHBoxLayout。因为你打算让这个 QHBoxLayout 不是 this 的顶级布局,所以你不应该将 this 传递给构造函数。

这是我的重写,我在本地侵入了一个测试应用程序,似乎工作得很好:

Widget::Widget(QWidget *parent) :
QWidget(parent)
{
QLabel *label = new QLabel("Test");
QHBoxLayout *hlayout = new QHBoxLayout();
QVBoxLayout *vlayout = new QVBoxLayout();
QSpacerItem *spacer = new QSpacerItem(40, 20, QSizePolicy::Fixed);
QLineEdit *lineEdit = new QLineEdit();
hlayout->addItem(spacer);
hlayout->addWidget(lineEdit);
vlayout->addLayout(hlayout);
vlayout->addWidget(label);
setLayout(vlayout);
}

关于c++ - QWidget::setLayout: 试图在 Widget ""上设置 QLayout "",它已经有一个布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10519006/

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