【问题标题】:Getting QInputDialog::getText() result from C code running in non-GUI thread从在非 GUI 线程中运行的 C 代码获取 QInputDialog::getText() 结果
【发布时间】: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


    【解决方案1】:

    如果您使用QString* 而不是QString&,它应该可以工作。您可能还必须将 QString* 注册为元类型 - 或者,如果您不介意这样做,请改用 void* 并来回转换。

    【讨论】:

    • 嗯,这很简单,使用指针而不是参考就可以了。谢谢!
    猜你喜欢
    • 2012-04-03
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多