gpt4 book ai didi

qt - Qt 中 MFC 等价物的 SendMessage

转载 作者:行者123 更新时间:2023-12-03 17:51:30 27 4
gpt4 key购买 nike

在 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 中添加什么参数?实际上是sendMessage
    调用的函数是正确的吗?

  • 这个“添加”函数在其他地方被调用。
    我知道这听起来与其他问题重复,我查看了提供我的一些成员的链接,但很抱歉我无法掌握太多内容。 —
    任何建议或批评都可能对我有帮助..非常感谢您的帮助

    最佳答案

    在您的情况下,您似乎有多个 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 )

    关于qt - Qt 中 MFC 等价物的 SendMessage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20351278/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com