2013-10-02 5 views
0

스레드로부터 이벤트를 메인 윈도우의 QtreeView에 게시해야합니다. 이제 이벤트를 게시하기 위해 Qobject에 대한 포인터 (예 : 메인 윈도우 내부의 qtreeview)가 필요합니다.메인 윈도우에 포인터 저장하기 - Qevent

이렇게하려면 생성자 MainWindow :: MainWindow()에서 내 주 창에 포인터를 가져 가야합니다. ---

cntrlObj cntrlObj_obj; 

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를 클래스는 다음과 같은 개체를 포함 :

sharedobj.h 파일 MainWindow를 위해 포인터를 포함 -----

/*! 
    Take Pointer to Mainwindow session window 
*/ 

    cntrlObj_obj->ui_ptr->setupUi(this); 

Mainwindow에 대한 포인터를 가져 오는 것이 올바른 방법일까요?

또한 "sharedobj.h"파일에서 수행 한 것처럼 mainwindow의 네임 스페이스 UI에 액세스하여 포인터를 선언 할 수있는 다른 sharedobj.h 파일 안에 "ui_mainwindow.h"파일을 포함 할 수 있습니까?

+0

왜 스레드에서 직접 이벤트를 게시해야합니까? 스레드 간 신호/슬롯을 고려한 후 주 스레드에서 이벤트를 게시합니다. 주 스레드에서 UI 문제에 대한 지식을 유지합니다. –

답변

0

Mainwindow 내에 지식을 현지화하고 이벤트를 게시해야합니다.

그래서 :

  1. 포스트 MainWindow를 인스턴스에 이벤트. 다음과 같이 사용자 정의 QEvent의 경우

  2. 구현할 MainWindow::customEvent(...) (그렇지 않으면 당신은 event(...) 구현할 것 :

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

아아, 왜 지구에 당신이보기에 이벤트를 보낼 필요가

를?