2011-01-07 20 views
1

我以前在this question中解决过类似的问题,在那里我问如何从运行C代码的Qt中的非GUI线程显示QMessageBox。从在非GUI线程中运行的C代码获取QInputDialog :: getText()结果

我建议的解决方案,使用信号插槽和一个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().) 

我在做什么错?即使通过方法工作?如果不是,我应该使用什么?

非常感谢您的回答。

回答

2

它应该,如果你使用QString*而不是QString&工作。您可能还需要注册QString*作为元类型 - 或者,如果您不能这样做,请使用void*,并来回投射。

+0

那么,这很容易,使用指针而不是参考作品。谢谢! – houbysoft 2011-01-07 03:37:24

相关问题