2011-01-07 96 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