sam*_*rat 5 qt mfc sendmessage
在QT中移植VS2010项目.
我想,我对之前的帖子不太清楚,所以我在这里再解释一下.
问题是..我有很多子Qdialog窗口,当用户点击生成一些消息.我希望这些消息在我的主应用程序窗口的QTablewidget上.
现在正如一些成员所建议的,我应该看看VS2010中的事情是如何完成的,并尝试在QT中复制相同内容.所以这是我的设计..请让我知道你的建议/批评.
1)vs 2010 - >在主应用程序窗口中
MESSAGE_MAP
Run Code Online (Sandbox Code Playgroud)
我们有
ON_MESSAGE( WM_NOTICE, OnAddMessage )
Run Code Online (Sandbox Code Playgroud)
在QT中做同样的事情我需要信号和插槽.所以有点像
connect( sender , SIGNAL(QtSingleApplication::messageReceived ( const QString &message ) ) , this , SLOT ( on_add_message( const QString & message ) );
Run Code Online (Sandbox Code Playgroud)
现在我该替换什么呢
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 );
}
Run Code Online (Sandbox Code Playgroud)
现在在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 );
}
Run Code Online (Sandbox Code Playgroud)
这个'add'函数正在其他地方被调用.我知道这听起来与其他问题重复,我已经查看了我的一些成员提供的链接,但很抱歉,我无法理解. - 任何建议或批评都可能对我有所帮助..帮助很多
在您的情况下,您似乎有多个 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();
}
Run Code Online (Sandbox Code Playgroud)
这与直接连接的信号槽具有相同的效果,并且接近于效果SendMessage。
如果有任何特殊原因您无法使用此结构,请指出它,因为它将影响您应使用的信号/插槽类型。
如果您对此结构感到满意,但想使用信号槽而不是直接调用,也请告诉我们,因为将其转换为信号槽代码相当容易(只要您的应用程序正在运行事件循环并且生成信号的代码继承自QObject)