c++ - 从 QWidgetList (QList<QWidget*>) 访问 QWidget 子槽/信号

标签 c++ qt qwidget qlist

我正在制作一个图形用户界面应用程序设计器。每次用户创建一个新的小部件时,它都存储在一个 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

关于c++ - 从 QWidgetList (QList<QWidget*>) 访问 QWidget 子槽/信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49854317/

相关文章:

c++ - 我还需要对 algorithm::join 使用 boost 吗?

drag-and-drop - 如何拖放自定义小部件?

c++ - 是否可以设置 qt 小部件的不透明度?

c++ - 递归模板定义

c++ - 从 stdin 读取时子进程挂起(fork/dup2 竞争条件)?

c++ - 中断分离的 boost::thread

c++ - 你如何用 doxygen 记录 QFlags?

c++ - 将它们传递给 cpp 后如何与 qml 项目值进行交互?

qt - 在 qml 中显示大文本

python - 在 pyqt 中从布局中删除项目的最佳方法是什么