Qt中MFC等效的SendMessage

时间:2013-12-03 12:30:46

标签: qt mfc sendmessage

在QT中移植VS2010项目。

我想,我对之前的帖子不太清楚,所以我在这里再解释一下。

问题是..我有很多子Qdialog窗口,当用户点击时会生成一些消息。我希望这些消息出现在我的主应用程序窗口的QTablewidget上 现在正如一些成员所建议的,我应该看看VS2010中的事情是如何完成的,并尝试在QT中复制相同内容。所以这是我的设计..请让我知道你的建议/批评。

1)vs 2010 - >在

中的主应用程序窗口中
MESSAGE_MAP

我们有

ON_MESSAGE( WM_NOTICE, OnAddMessage )
  • 其中WM_NOTICE = WM_USER + 1;
在QT中做同样的事情我需要信号和插槽。所以像

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

现在我应该用

代替什么
  • '发件人'?在我的情况下,谁将成为发件人?
  • SIGNAL(QtSingleApplication :: messageReceived)是对吗?
  • Slot - 这里没有问题..我可以实现我的代码 将在排序顺序中将消息放在QTable widegt中。

2)现在,如果我查看在VC ++中开发的现有项目的内部QDialog窗口源代码 他们有像

这样的东西
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中做同样的事情

void 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   );

}
  1. 我应该在SendMessage中添加什么参数? IS infact sendMessage 是正确的功能吗?
  2. 这个'add'函数正在其他地方被调用。  我知道这听起来像其他问题的重复,我已经查看了我的一些成员提供的链接,但我很抱歉,我无法掌握很多。 - 任何建议或批评都可能对我有所帮助..帮助

1 个答案:

答案 0 :(得分:0)

在您的情况下,您似乎有多个QDialog,它们应该将内容发送到单个MainApplication,对吗?

有没有特殊原因你不能通过直接函数调用来做到这一点?如:

MyMainWindows * pMainWindow;

...

void MyMainWindows::addMessage( const SMS& message )
{
...
}

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

  pMainWindow->addMessage( messages_ );
  mutex.unlock();
}

这与具有直接连接的信号槽具有相同的效果,并且接近SendMessage所做的。

如果有任何特殊原因你不能使用这种结构,请识别它,因为它会对你应该使用什么类型的信号/插槽产生影响。

如果您对这种结构很好,但想使用信号槽而不是直接呼叫,请告诉我们,因为将其转换为信号槽代码相当容易(只要您的应用正在运行事件循环和代码生成信号继承自QObject