【问题标题】:saving pointer to mainwindow - Qevent保存指向主窗口的指针 - Qevent
【发布时间】:2013-10-08 20:02:57
【问题描述】:

我需要将一个线程中的事件发布到我的主窗口中的 QtreeView。现在要发布一个事件,我们需要指向 Qobject 的指针(即我们在主窗口中的 qtreeview)。

为此,我必须在构造函数 MainWindow::MainWindow() 中获取指向主窗口的指针。

sharedobj.h 文件包含指向主窗口的指针:----

#include "ui_mainwindow.h" 

/*!
  Shared object among threads.
*/
class cntrlObj
{
public:
    cntrlObj();
    ~ctrlObj();

    /// Thread run control
    bool m_bQuit;

    /*!
        Pointer to mainwindow window
    */
    Ui::MainWindow *ui;

}

主窗口类包含以下对象:---

cntrlObj cntrlObj_obj;

主窗口构造函数:-----

/*!
   Take Pointer to Mainwindow session window
*/

    cntrlObj_obj->ui_ptr->setupUi(this);

请建议将指针指向 Mainwindow 是否正确?

我还可以在另一个 sharedobj.h 文件中包含文件“ui_mainwindow.h”以访问主窗口的命名空间 UI 以声明一个指针,就像我在“sharedobj.h”文件中所做的那样?

【问题讨论】:

  • 为什么必须直接从线程发布事件?我会考虑线程之间的信号/插槽,然后在主线程中发布事件。将有关 UI 事务的知识保留在它所属的位置(在主线程中)。

标签: qt qevent


【解决方案1】:

您需要在主窗口中本地化知识,并将事件发布到它。

所以:

  1. 将事件发布到主窗口实例。

  2. 重新实现MainWindow::customEvent(...)如下(如果它是自定义QEvent,否则你将重新实现event(...)

    void MainWindow::customEvent(QEvent * ev) {
      if (ev->type() == MyEventType) {
        QCoreApplication::sendEvent(ui->treeView, ev);
      }
    }
    

唉,为什么您需要将事件发送到视图?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多