2013-10-02 3 views
0

Мне нужно разместить событие из потока в QtreeView в моем Mainwindow. Теперь, чтобы опубликовать событие, нам нужен указатель на Qobject (т. Е. Наш qtreeview внутри главного окна).Сохранить указатель на mainwindow - Qevent

Для этого мне нужно взять указатель на мой главный указатель в конструкторе MainWindow :: MainWindow().

sharedobj.h файл содержит указатель на MainWindow: ----

#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; 

} 

MainWindow класс содержит следующий объект: ---

cntrlObj cntrlObj_obj; 

MainWindow конструктор: -----

/*! 
    Take Pointer to Mainwindow session window 
*/ 

    cntrlObj_obj->ui_ptr->setupUi(this); 

Просьба предложить вам правильный способ сделать указатель на Mainwindow?

Также я могу включить файл «ui_mainwindow.h» в другой файл sharedobj.h для доступа к пользовательскому интерфейсу пространства имен основного окна, чтобы объявить указатель, как я сделал в файле «sharedobj.h»?

+0

Зачем вам нужно публиковать событие из потока напрямую? Я бы рассмотрел сигнал/слот между потоком и затем разместил событие в основном потоке. Сохраняет знания о возможностях интерфейса, где он принадлежит (в основном потоке). –

ответ

0

Вам необходимо локализовать знания в Mainwindow и разместить событие.

Итак:

  1. Сообщение событие к экземпляру MainWindow.

  2. переописать MainWindow::customEvent(...) следующим образом (если это обычай QEvent, иначе вы бы переописать event(...):

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

Увы, почему на Земле вы должны послать событие в целях

?
Смежные вопросы