从非GUI线程中运行的C代码获取QInputDialog :: getText()结果

时间:2011-01-07 01:08:24

标签: c++ c multithreading qt

我之前在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().)

我做错了什么?通过接近甚至工作?如果没有,我应该使用什么?

非常感谢您的回答。

1 个答案:

答案 0 :(得分:2)

如果您使用QString*而非QString&,则应该有效。您可能还必须将QString*注册为元类型 - 或者,如果您不能这样做,请使用void*代替并来回投射。