小编LDe*_*her的帖子

Qt findChild 返回 0

我目前正在研究一种在运行时使用 GUI 修改对象内容的好方法,项目使用 Qt。

所以我想到了传递QLayout给对象,让他们创建自己的 GUI。作为 POC,我创建了这个(“display”是QVBoxLayout*参数的名称):

QPushButton* button = new QPushButton();
button->setText("foo");
button->setObjectName("bar");
display->addWidget(button);
Run Code Online (Sandbox Code Playgroud)

它和预期的一样好。但是我需要阅读用户在 GUI 中输入的内容,所以这就是我接下来所做的:

QPushButton *button2 = display->findChild<QPushButton *>();
if(button2)
    std::cout << button2->objectName().toStdString() << std::endl;
Run Code Online (Sandbox Code Playgroud)

这里什么都没有放出来 - if() 语句是假的!

QList<QWidget *> widgets = display->findChildren<QWidget *>();
foreach (QWidget* b, widgets) {
    std::cout << b->objectName().toStdString() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

同样,widgets列表是空的。

我尝试查看完整的成员列表:http : //doc.qt.digi.com/qt/qvboxlayout-members.html,但 findChild/findChildren 似乎最适合我的需求......

下面的解决方案

我现在是这样处理的:

不是将 a 传递QVBoxLayout给 GUI 创建,而是QWidget应该传递 a,在上面命名为“display”之后。

QVBoxLayout* layout = new …
Run Code Online (Sandbox Code Playgroud)

c++ user-interface qt

5
推荐指数
1
解决办法
2万
查看次数

标签 统计

c++ ×1

qt ×1

user-interface ×1