2013-12-12 113 views
0

在QT中移植VS2010項目。如何將消息從子類對話框窗口發送到主窗口。 Qt

我想,我對我以前的文章並不是很清楚,所以我在這裏再次解釋它。

問題是..我有很多sub Qdialog窗口,當用戶點擊時會生成一些消息。我希望這些消息位於我的主應用程序窗口的QTablewidget上。 現在正如一些成員所建議的那樣,我應該看看事情在VS2010中是如何完成的,並嘗試在QT中複製它們。所以這是我的設計..請讓我知道你的建議/批評。

1)與2010 - >開主應用程序窗口在

MESSAGE_MAP 

我們有

ON_MESSAGE(WM_NOTICE, OnAddMessage) 

其中WM_NOTICE = WM_USER + 1;

............................................ ........................................

在QT I中做同樣的事情需要信號和插槽。所以像

connect(sender , SIGNAL(QtSingleApplication::messageReceived (const QString &message) ) , this , SLOT (on_add_message(const QString & message)); 

東西現在我應該怎麼用

  • 「發件人」取代嗎? ,誰是我的情況下的發件人?
  • SIGNAL(QtSingleApplication :: messageReceived)是對的嗎?
  • 槽 - 這裏沒有問題..我可以實現代碼,其中我 將按照排序順序將消息放在QTable中。

............................................ .................................................. ..........

2)現在,如果我考慮這是在VC開發現有項目的內QDialog的Windows源代碼++,他們有這樣的事情

void Message_information::add(const SMS& message) 
{ 
//SMS is a structure and fields are SYSTEMTIME, Enum , CString 
CCriticalSection critical_section; 
CSingleLock lock(&critical_section, true); 
messages_.insert(message); // where messages_ is an object std::multiset 

SendMessage(dialog_->m_hWnd, WM_MULTIBOXMESSAGE, 0, 0); 
} 

現在做的一樣Qt

v

oid Message_information::add(const SMS& message) 
{ 
    QMutex mutex; 
    mutex.lock(); 
messages_.insert(message); // where messages_ is an object std::multiset 

//SendMessage(dialog_->m_hWnd, WM_MULTIBOXMESSAGE, 0, 0); 
QtSingleApplication::sendMessage (// send multiset values here ); 

} 
  • 我應該添加什麼paramemter在SendMessage函數?

  • IS infact sendMessage是否調用正確的函數?

'add'函數被調用到其他地方。我知道這聽起來是其他問題的重複,我已經查看了我的一些成員提供的鏈接,但我很抱歉,我無法掌握很多。 - 任何建議或批評可能會幫助我..幫助很多

+0

如果你從MFC移植到Qt的,你應該閱讀本教程(如果你還沒有讀它) - http://doc.qt.digia.com/solutions/4/qtwinmigrate/winmigrate-walkthrough html的 – sashoalm

回答

0

如果您只是試圖在兩個QOjects之間發送信息,請忘掉Windows消息。這是完全浪費時間。

如果你只想從您的自定義QDialog的數據傳遞到QMainWindow的一些與QTableWidget的信號和插槽應該做的整個工作。只需爲QDialog定義信號,並在必要時發出它們,並創建與包含QTablewidget的QMainWindow中相應插槽的連接。

時,你應該處理Windows消息Qt中你自己的唯一情況是,當你做一些不尋常或寫別的東西,然後QT(例如MFC)或某些進程間通信代碼進行通信時。