我已經開發了一個Qt/C++應用程序,我已經使用信號/插槽機制來在兩個線程之間進行交互。第一個線程運行UI/TreeWidget,第二個運行框架Qt/C++如何在發出信號時等待一個插槽
我在一個動作中遇到了問題。
在UI方面,我開始行動之前,我的UI和框架之間的連接信號/槽,如下面的treewidget.cpp
connect(&m_Framework, &Framework::RequestIfNameExist, this, &TreeWidget::RequestIfNameExist);
connect(this, &TreeWidget::SendAnswerIfNameExist, &m_Framework, &Framework::NotifIfNameExist);
框架,啓動發送RequestIfNameExist:
emit RequestIfNameExist(tmpname, item, fileInfo.isDir());
while(WaitingResponse == false){
usleep(200);
}
我添加了一個循環,因爲我需要等待反饋。奇怪的事情是,在treewidget.cpp,我從來沒有在
void TreeWidget::RequestIfNameExist(QString name, TreeWidgetItem *parent, bool isFolder) {
#ifdef PULS_LOG
QLOG_INFO() << "[TreeWidget] [RequestIfNameExist] ";
#endif
emit SendAnswerIfNameExist(isNameExist(name, parent), isFolder);
}
我從來沒有訪問RequestIfNameExist在TreeWidget但信號被髮射進入。
我也放了while循環的框架,從TreeWidget
void Framework::NotifIfNameExist(QTreeWidgetItem *item, bool isFolder){
if(item != NULL)
item->isFolder = isFolder;
WaitingResponse = true;
}
等待反饋的任何想法,爲什麼由框架發出的信號無法送達的treewidget?它來自何時?
是否有這樣的「等待事件」 +超時
感謝
Framework線程正在運行while循環,所以它將無法執行'NotifIfNameExist'。框架查詢UI元素loke Treewidget是很奇怪的。 UI通常會查詢類似框架的後端以獲取數據和UI狀態。 –
我想你想爲每個信號「連接」信號類中的信號和插槽。 – zar