2013-10-05 27 views
0

我有一個(有點)簡單的程序創建新線程,每個連接到插座一個:創建的QObject:findChildren和QThread的

void TelnetServer::incomingConnection(qintptr socketDescriptor) 
{ 
    TelnetConnection *thread = new TelnetConnection(socketDescriptor); 
    connect(thread, SIGNAL(shutdownRequested()), m_controller, SLOT(shutdown())); 
    connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater())); 
    thread->start(); 
} 

一個新的線程後,我輸出到qDebug所有列表創建該QThreads(TelnetConnection的)家長像這樣的孩子:

QList<QObject*> activeTelnetConnections = m_telnetserver->findChildren <QObject *>(); // Find all QThreads that children of telnetserver 
qDebug() << "Children: " << activeTelnetConnections; 

由於我QThreads自QObject decend,我希望看到QThreads多的列表。但是,我找不到Q線程!這是我看到的:

Children: (QNativeSocketEngine(0x7eb880) , QSocketNotifier(0x7ea5f0)) 

爲什麼我看不到子線程?這是否意味着線程不再與父對象關聯?或者我在這裏做錯了什麼...

回答

1

這是否意味着線程不再與父對象關聯?

它可能從未關聯。當你構造線程時,你需要傳遞父對象,但是你的TelnetConnection似乎是錯誤的,因爲它不期望一個父參數,或者你不會傳遞那個內部通過以下構造函數進一步傳遞給基類的對象。

QThread(QObject * parent = 0) 

或者您必須稍後調用setParent()。

void QObject::setParent(QObject * parent) 

這將意味着thread.setParent(this);爲你的代碼,但我寧願建議修復你的線程類的構造函數或調用它。

或者,您也可以爲TelnetConnection明確設置孩子,但如果可能的話,我會建議適當的構造。

+0

就是這樣 - 我必須在構造函數的初始化行上設置父級,然後纔可見! – TSG