我以前在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().)
我在做什麼錯?即使通過方法工作?如果不是,我應該使用什麼?
非常感謝您的回答。
那麼,這很容易,使用指針而不是參考作品。謝謝! – houbysoft 2011-01-07 03:37:24