【发布时间】:2016-10-10 10:00:22
【问题描述】:
我在这里阅读了一些关于信号和插槽及其参数的主题,但没有发现以下问题: 我正在使用 Qt 5.7
我只有 2 个类,在第一个类中,我想用字符串 message 和 location(或特定对象)在哪里显示它。
现在是这样的:我在第一堂课上发出信号:
emit signalWriteToTextEdit("hallo","textEdit_3");
我想要做的是以某种方式将像 textEdit 这样的对象作为第二个参数传递。现在没有 QString 了。
第二类是槽:
void writeToTextEdit(QString info, QString where){
where.append(info); //I would like to do something like this
}
只是不知道如何将第二个参数“where”视为可访问对象,例如 textEdit,因此我可以更改其内容。
如果可能的话,我也在考虑:
- Ui 对象是否有一些方法,例如按名称查找元素?
- 是否可以使用 foreach 遍历 ui 中的所有元素并检查它们的名称...?我试过了,但不知道该怎么做。
如果不清楚,我会解释更多
【问题讨论】:
-
您可以使用
QSignalMapperdoc.qt.io/qt-5/qsignalmapper.html -
顺便说一句,如果你有一个指向对象的指针作为“第二个参数”,为什么你根本不想调用一个方法?为什么需要那里的信号?
-
@DušanTichý 所以类 1 对 GUI 元素一无所知?在这种情况下,您只能在键和要写入的元素之间建立映射。我建议在开始时建立一个静态地图以便更快地查找,而不是每次都循环。
-
我必须同意上面的@DmitrySazonov。您的发射器拥有几乎足够的数据来执行所需的操作——
QTextEdit的名称——但无法直接访问QTextEdit。这是在发送者和接收者之间划分功能的一种非常奇怪的方式。发射器最初是如何获得QTextEdit名称的?难道它没有传递一个指向QTextEdit的指针,而不仅仅是它的名字吗? -
使用单独的方法将文本附加到不同的
QTextEdits 并没有错。到目前为止,您提供的信息似乎是最好的解决方案。
标签: qt