【发布时间】:2013-12-19 12:25:26
【问题描述】:
在 QT 中移植 VS2010 项目。
我想,我之前的帖子不是很清楚,所以我在这里再次解释一下。
问题是.. 我有很多子 Qdialog 窗口,当用户单击时会生成一些消息。我希望这些消息出现在我的主应用程序窗口的 QTablewidget 上。
现在正如一些成员所建议的,我应该看看 VS2010 中的事情是如何完成的,并尝试在 QT 中复制相同的内容。所以这是我的设计.. 请让我知道您的建议/批评。
1) vs 2010 -> 在主应用程序窗口中
MESSAGE_MAP
我们有
ON_MESSAGE( WM_NOTICE, OnAddMessage )
- 其中 WM_NOTICE = WM_USER+1;
在 QT 中做同样的事情我需要 signal 和 slot 。所以像
connect( sender , SIGNAL(QtSingleApplication::messageReceived ( const QString &message ) ) , this , SLOT ( on_add_message( const QString & message ) );
现在我应该用什么替换这里
- ‘发件人’? ,在我的情况下,谁将是发件人?
- SIGNAL (QtSingleApplication::messageReceived) 对吗?
- 插槽 — 这里没有问题 .. 我可以实现我在其中的代码 将消息按排序顺序放置在 QTable widegt 中。
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 中做同样的事情
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 );
}
- 我应该在 SendMessage 中添加什么参数?是事实上的发送消息 调用的函数是否正确?
这个‘add’函数正在其他地方被调用。 我知道这听起来与其他问题重复,我已经查看了为我的一些成员提供的链接,但很抱歉我无法掌握太多。 — 任何建议或批评都可能对我有所帮助.. 非常感谢大家的帮助
【问题讨论】:
-
大家好,我真的一窍不通,有人可以给我一个提示吗?
-
WM_MULTIBOXMESSAGE是什么? -
HI JOnny,这只是在某些文件中声明的一些#defined 变量。我主要关心的是如何在 QT 中向主应用程序发送消息
-
您好 Jonny,这只是在某些文件中声明的一些#defined 变量。它用于定义私有窗口类使用的私有消息,通常形式为 WM_USER+x,其中 x 是整数值。所以这里是 WM_MULTIBOXMESSAGES WM_USER+ 1
标签: qt mfc sendmessage