Qt findChild returning 0
Qt findChild returning 0
我目前正在研究一种在运行时使用GUI修改对象内容的好方法,项目使用Qt。
所以我想把QLayout
传递给对象,让它们创建自己的GUI。作为POC,我创建了这个("display"是QVBoxLayout*
参数的名称):
QPushButton* button = new QPushButton();
button->setText("foo");
button->setObjectName("bar");
display->addWidget(button);
这和预期的一样好。但我需要阅读用户在GuI中键入的内容,所以这就是我接下来要做的:
QPushButton *button2 = display->findChild<QPushButton *>();
if(button2)
std::cout << button2->objectName().toStdString() << std::endl;
这里什么都不输出-if()语句为false!
QList<QWidget *> widgets = display->findChildren<QWidget *>();
foreach (QWidget* b, widgets) {
std::cout << b->objectName().toStdString() << std::endl;
}
类似地,widgets
列表是空的。
我试着在以下位置查看完整的成员列表:http://doc.qt.digia.com/qt/qvboxlayout-members.html,但是findChild/findChildren似乎最适合我的需求。。。
下面的解决方案
这就是我现在的处理方式:
不应该将QVBoxLayout
传递给GUI创建,而应该传递QWidget
,如下所述命名为"display"。
QVBoxLayout* layout = new QVBoxLayout();
display->setLayout(layout);
QPushButton* button = new QPushButton();
button->setText("foo");
button->setObjectName("bar");
layout->addWidget(button);
现在转到findChild
/findChildren
:
QPushButton *button2 = display->findChild<QPushButton *>("bar");
if(button2)
std::cout << button2->objectName().toStdString() << std::endl;
QList<QWidget *> widgets = display->findChildren<QWidget *>();
foreach (QWidget* b, widgets) {
std::cout << b->objectName().toStdString() << std::endl;
}
这两种方法对我都很有效!(另外,现在布局可以通过GUI创建自由选择!)
QWidget
的父级必须是QWidget
。CCD_ 10不是CCD_。
布局用于移动QWidget
的子级并调整其大小。尽管您可以通过对布局进行调用来添加子窗口小部件,但最终,它们的父窗口小部件将是布局所在的QWidget
举例说明:
QWidget* widget = new QWidget;
qDebug("Widget: %p", widget);
QHBoxLayout* layout = new QHBoxLayout;
qDebug("Layout: %p", layout);
QWidget* child = new QWidget;
layout->addWidget(child);
qDebug("Child's parent before setLayout: %p", child->parent());
widget->setLayout(layout);
qDebug("Child's parent after setLayout: %p", child->parent());
输出:
Widget: 0x8e1c1e0
Layout: 0x8e1c3f0
Child's parent before setLayout: 0x0
Child's parent after setLayout: 0x8e1c1e0
相关文章:
- ZLib GZIP Returning Z_BUF_ERROR(-5)
- C++:寻找"returning address of local variable..."的更正
- cin.fail() not returning true
- "Warning : No return statement in function returning non-void"是什么意思?
- std::localtime returning null
- 为什么我收到以下错误:"returning reference to temporary [-Werror=return-local-addr]"
- findChild 从不显示文本浏览器
- GetComboBoxInfo returning false
- Returning std::vector with std::move
- 如何修复空虚拟方法的"warning: no return statement in function returning non-void [-Wreturn-type]"
- Returning std::make_pair with std::forward
- GetThreadContext() returning 87
- 为什么不触发"returning reference to temporary object"编译器警告?
- MoveFileEx - returning GetLastError(): 17
- 为什么 decltype 在 "auto returning" 函数中是必需的?
- Self-returning class?
- Qt findChild returning 0
- SDL_LoadBMP only returning NULL
- C++11 lambda returning lambda
- cvLoadImage Returning NULL