2013-08-15 4 views
1

예 : 두 개의 창 (A와 B)이 있습니다. A의 한 인스턴스는 현재 콤보 상자 (데이터베이스의 항목으로로드 됨)와 함께 열립니다. 나는 "Edit"버튼을 클릭하고 B 창을 열어 언급 된 데이터베이스의 내용을 편집 할 수있게합니다.열린 창 인스턴스를 매개 변수로 두 번째 창에 전달합니다.

a.cpp

을 : 나는 창 B에서 "저장"을 누르거나 내가 창 B.

을 닫을 때 모든 코드는 내가 생각할 수있을 때 내가 필요로하는 콘텐츠를 자동으로 새로 고침 창 A를위한

b *new_window = new b; 
b->show(); 
b->passwindowfunction(this); 

b.cpp 헤더 파일로

void b::passwindowfunction(sometypeidkwht window) 
{ 
    window->combobox... 
} 

, 난 내가 선언 될지 잘 모릅니다.

+0

왜 창 인스턴스를 매개 변수로 두 번째 창으로 전달 했습니까? 개체 통신이 필요한 개체라고 생각합니다. 신호/슬롯을 살펴보고 질문을 업데이트하십시오. – Ashif

답변

1

Qt의 신호/슬롯 시스템은 여기서 필요한 것을 제공합니다. 당신이 뭔가를 할 수 있습니다 - 당신이 볼 수 있듯이

class QWindowA : public QWindow 
{ 
    Q_OBJECT 

    private slots: 
     void RefreshContent(); // refreshes content of the window 
}; 


class QWindowB : public QWindow 
{ 
    Q_OBJECT 

    public: 
     void Save(); // save content and emit Saved() signal 

    signals: 
     void Saved(); 
}; 

는 창 A는 업데이트 할 필요가있을 때 호출되는 것 슬롯 기능을 선언하고 창 B는 저장된 신호()를 가지고있다. 당신은 내용을 저장 완료했습니다

창 B의 저장() 함수에서
// Assuming instances winA and winB have been created 
connect(winB, &WindowB::Saved, winA, &WindowA::RefreshContent); // using Qt 5 connect call 

, 저장된() 신호를 방출 -이 :

당신은 슬롯 RefreshContent()에 저장된의 신호를 연결해야 -

emit Saved(); 

이전 연결 호출로 인해 WindowA는 해당 내용을 업데이트합니다. 업데이 트하기가 폐쇄됩니다 때 창 B를 삭제하면 바로 창 A에 대한 창 B의 소멸자에 저장된() 신호를 방출, 창을 닫는으로

, 다른 처리 close 이벤트 : -

void WindowB::closeEvent(QCloseEvent *event) 
{ 
    emit Saved(); 
    QWindow::closeEvent(event); 
} 
0

매우 모호하게 묻습니다. QDialog 기반 위젯을 사용할 수 있습니다. 모달로여십시오. 그런 다음 닫을 때 상태를 쿼리 할 수 ​​있습니다. 여하튼 창을 닫거나 '저장'을 누른 경우.

저장 버튼의 clicked() 신호를 A 슬롯에 연결할 수도 있습니다. 그런 다음 창 B를 닫을 때 추가 코드를 작성해야합니다. 윈도우 B의 closeEvent를 오버라이드합니다. 신호에서 QComboBox를 업데이트해야합니다.

또는 귀하의 QComboBox에 데이터베이스 인식 모델을 사용하십시오. QSqlQueryModel을 기반으로합니다. 그런 다음 데이터베이스의 데이터를 변경하면 QComboBox가 자동으로 업데이트됩니다.

관련 문제