【发布时间】:2016-06-30 18:35:25
【问题描述】:
Widget::Widget(QWidget *parent) : QWidget(parent) {
file.open(QFile::ReadOnly);
QWidget *w = loader.load(&file);
// MyWidget *w = new MyWidget(loader.load(&file));
vLayout.addWidget(w);
file.close();
vLayout.addWidget(&bt);
}
上面的代码生成了上面的图像。但是我想对刚刚加载的小部件做点什么,这就是我从QWidget 派生MyWidget 的原因。而且好像有问题。
如果我将QWidget 替换为MyWidget,那么它就不会再在那里显示了。下面的代码生成下面的图像。
Widget::Widget(QWidget *parent) : QWidget(parent) {
file.open(QFile::ReadOnly);
// QWidget *w = loader.load(&file);
MyWidget *w = new MyWidget(loader.load(&file));
vLayout.addWidget(w);
file.close();
vLayout.addWidget(&bt);
}
在哪里MyWidget:
// mywidget.h
#include <QWidget>
class MyWidget : public QWidget {
Q_OBJECT
public:
explicit MyWidget(QWidget *parent = nullptr);
};
// mywidget.cpp
#include "mywidget.h"
#include <QDebug>
MyWidget::MyWidget(QWidget *parent) : QWidget(parent) {
qDebug() << "do something here";
}
问题 1:为什么小部件(组框)没有显示在那里?如何让它出现?
好的,感谢@KubaOber,问题 1 已完成。现在我想访问untitled.ui里面的小部件,我试过了:
MyWidget::MyWidget(QWidget *parent) : QWidget(parent) {
foreach (QLabel *label, parent->findChildren<QLabel*>())
if(label->objectName().contains("Value"))
qDebug() << "label" << label;
}
但它什么也没返回。相反,在loader.load(&file, vLayoutWidget)) 中传递一个父级可以使untitled.ui 小部件可用,但也会使vLayoutWidget 的内容失效。我想问题是应该在loader.load()) 中作为父级传递什么?
【问题讨论】:
-
理想情况下,您应该以this one 的风格创建一个独立的测试用例。
-
请发布一个新问题,而不是编辑成一个旧问题。
-
你指的是哪个旧的?
-
您不能在
MyWidget的构造函数中迭代任何内容,因为此时它还没有子级。再次,请绝对发布完整测试用例。我不得不假设其余代码的外观。如果没有一段简单的代码可以在不搞乱主项目的情况下进行试验,您的生活也会变得更加艰难。了解如何使用 Qt Creator 快速创建测试项目。您可以使用my simple qmake project template 来帮助解决这个问题。