2013-12-12 71 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)或某些进程间通信代码进行通信时。