我之前在this question解决了类似的问题,在那里我问如何在运行C代码的Qt中从非GUI线程显示QMessageBox。
我建议的解决方案,使用信号& slot和一个Qt :: QueuedConnection连接一个信号,该信号可以由调用C ++函数的C代码发出,后者又调用我的主GUI窗口的C ++方法然后发出信号,适用于QMessageBoxes。
但是,现在我还需要能够从QInputDialog请求来自用户的输入,来自在非GUI线程中运行的C代码。
我考虑过使用以下插槽代码和上述相同的原理:
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().)
我做错了什么?通过接近甚至工作?如果没有,我应该使用什么?
非常感谢您的回答。
答案 0 :(得分:2)
如果您使用QString*
而非QString&
,则应该有效。您可能还必须将QString*
注册为元类型 - 或者,如果您不能这样做,请使用void*
代替并来回投射。