【发布时间】:2011-01-07 01:08:24
【问题描述】:
我之前在this question 中解决了一个类似的问题,在那里我询问了如何在运行 C 代码的 Qt 中从非 GUI 线程显示 QMessageBox。
我被建议的解决方案是,使用信号和插槽以及 Qt::QueuedConnection 来连接可能由 C 代码发出的信号,该 C 代码调用 C++ 函数,然后调用我的主 GUI 窗口的 C++ 方法,然后发出信号,对 QMessageBoxes 工作正常。
但是,现在我还需要能够从运行在非 GUI 线程中的 C 代码中的 QInputDialog 向用户请求输入。
我曾想过使用下面的插槽代码和上面描述的相同原理:
void MyWidget::prompt_slot(QString str, QString &answer)
{
answer = QInputDialog::getText(0, "", str);
}
和一个 Qt::BlockingQueuedConnection,以便插槽修改对字符串的引用,然后我可以从 C 代码中访问该字符串。
不幸的是,我收到以下运行时错误:
QObject::connect: Cannot queue arguments of type 'QString&'
(Make sure 'QString&' is registered using qRegisterMetaType().)
我做错了什么?通过方法甚至会起作用吗?如果没有,我应该使用什么?
非常感谢您的回答。
【问题讨论】:
标签: c++ c multithreading qt