/* Dialog Class */
class Dialog : public QDialog
{
Q_OBJECT
public:
explicit Dialog(QWidget *parent = 0);
//void displayDialog(QString arg); //外界字符串传入到textEdit中
~Dialog();
private:
Ui::Dialog *ui;
};
/* MainWindow.cpp */
Dialog *dlg = new Dialog;
Dialog *dlg2 = new Dialog;
我基于Dialog Class创建了两个对象,如果我不知道变量* dlg和* dlg2,如何识别这两个对话框?
答案 0 :(得分:0)
识别任何QObject
的典型方法是使用Qobject
的{{3}}属性。
这在测试中非常常用,我们可以将其视为objectName
和findChild
中使用的主要身份识别形式。
修改强>
一般来说,所有对象都将由主窗口拥有。这允许Qt为您处理很多事情。一些关于如何重要的简单示例:
请注意,所有这些功能都贯穿整个层次结构。也就是说,如果我有一个由QObject
拥有的QDialog
由主窗口所拥有,那么当QObject
将在主窗口被销毁时将被销毁,层次结构中的其他对象,可以通过从主窗口开始搜索找到。
不是2个无关联的弹出窗口,而是让2个弹出窗口由主窗口拥有:
QMainWindow mainWin;
QDialog dlg(&mainWin);
QDialog dlg2(&mainWin);
dlg.setObjectName("two");
QDialog* dfind = mainWin.findChild<QDialog*>("two");
答案 1 :(得分:0)
如果您的对话框中没有任何父级(parent == nullptr),您可以迭代所有窗口并比较它的对象名称。
QWidget* GetWidgetByObjectName(const QString& Name) {
QGuiApplication* a = dynamic_cast<QGuiApplication*>(QCoreApplication::instance());
if (a) {
for (QWidget* w : a->allWidgets()) {
if (w->objectName() == Name) {
return w;
}
}
}
return nullptr;
}
QDialog* Dlg = qobject_cast<QDialog*>(GetWidgetByObjectName("two"));
但是,在大多数情况下,最好分配父母。在这种情况下,您可以迭代已经发布的所有孩子。