从 QWidgetList (QList<QWidget*>) 访问 QWidget child slots/signals
Accessing QWidget child slots/signals from a QWidgetList (QList<QWidget*>)
我正在制作一个图形用户界面应用程序设计器。每次用户创建一个新的小部件时,它都存储在一个 QWidgetList 中。它可以是一个 QPushButton,一个 QLineEdit,等等。
例如,假设我有一个 QPushButton(索引 0)和一个 QLineEdit(索引 1)。
是否可以访问WidgetList[0]的clicked信号,或者使用WidgetList[1]的slot setText?
或者我真的必须为每种类型创建一个 QList,例如 QList 和 QList 吗?
提前致谢
要使用新的连接语法,您必须将小部件转换为正确的类型。例如:
QPushButton b{“clear”};
QLineEdit e;
QWidgetList widgets{&b, &e};
QObject::connect(qobject_cast<QPushButton*>(widgets[0]), &QPushButton::clicked,
qobject_cast<QLineEdit*>(widgets[1]), &QLineEdit::clear);
在设计器用例中,您可能会使用它们的文本签名或 QMetaMethod
句柄来引用信号和插槽,然后根本不需要任何转换,因为那些 connect
方法将对象向上转换为 QObject
。
我正在制作一个图形用户界面应用程序设计器。每次用户创建一个新的小部件时,它都存储在一个 QWidgetList 中。它可以是一个 QPushButton,一个 QLineEdit,等等。
例如,假设我有一个 QPushButton(索引 0)和一个 QLineEdit(索引 1)。
是否可以访问WidgetList[0]的clicked信号,或者使用WidgetList[1]的slot setText?
或者我真的必须为每种类型创建一个 QList,例如 QList
提前致谢
要使用新的连接语法,您必须将小部件转换为正确的类型。例如:
QPushButton b{“clear”};
QLineEdit e;
QWidgetList widgets{&b, &e};
QObject::connect(qobject_cast<QPushButton*>(widgets[0]), &QPushButton::clicked,
qobject_cast<QLineEdit*>(widgets[1]), &QLineEdit::clear);
在设计器用例中,您可能会使用它们的文本签名或 QMetaMethod
句柄来引用信号和插槽,然后根本不需要任何转换,因为那些 connect
方法将对象向上转换为 QObject
。