【发布时间】:2013-12-12 22:32:33
【问题描述】:
在 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 窗口源代码,他们会看到类似
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 );
}
我应该在 SendMessage 中添加什么参数?
事实上 sendMessage 是正确调用的函数吗?
“add”函数正在其他地方被调用。我知道这听起来与其他问题重复,我已经查看了为我的一些成员提供的链接,但很抱歉我无法掌握太多。 — 任何建议或批评都可能对我有所帮助.. 非常感谢大家的帮助
【问题讨论】:
-
如果您要从 MFC 移植到 Qt,您应该阅读本教程(如果您还没有阅读过) - doc.qt.digia.com/solutions/4/qtwinmigrate/…
标签: c++ qt visual-studio-2012 signals-slots