【问题标题】:how to send messages from sub class dialog windows to main windows . Qt如何将消息从子类对话窗口发送到主窗口。 Qt
【发布时间】: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”函数正在其他地方被调用。我知道这听起来与其他问题重复,我已经查看了为我的一些成员提供的链接,但很抱歉我无法掌握太多。 — 任何建议或批评都可能对我有所帮助.. 非常感谢大家的帮助

【问题讨论】:

标签: c++ qt visual-studio-2012 signals-slots


【解决方案1】:

如果您只是想在两个 QOject 之间发送信息,请忘记 Windows 消息。这完全是浪费时间。

如果您只想将数据从自定义 QDialog 传递到带有 QTablewidget 信号的 QMainWindow,并且插槽应该可以完成整个工作。只需为您的 QDialog 定义信号,在必要时发出它们,并在包含 QTablewidget 的 QMainWindow 中创建与相应插槽的连接。

您应该在 Qt 中处理自己的 windows 消息的唯一情况是当您做一些不寻常的事情或与用其他东西编写的代码进行通信时,然后是 qt(例如 MFC)或一些进程间通信。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-31
    • 1970-01-01
    • 2013-02-06
    • 1970-01-01
    相关资源
    最近更新 更多