2011-07-27 5 views
0

QStackedLayout에 대해 질문하고 싶습니다. 지금, 나는 QStackedLayout 에 추가 된 몇 가지 위젯을 그리고 난 그런 STH을하고 싶지 : 이 때 페이지 X에 대한 사용자 스위치, 페이지 X. 내가 그렇게 할 수있는 방법QT QStackedLayout 문제

새로 고침? 새로 고침 할 때 실행하려는 사용자 지정 코드가 있습니다. 고맙습니다.

+1

"새로 고침 페이지 X"는 무엇을 의미합니까? –

+0

데이터베이스에서 다시 데이터를로드하고 – Bear

답변

1

내 의견에 따라 현재 페이지가 변경 될 때 생성되는 신호를 찾고 화면의 기본 데이터를 업데이트 할 수있는 것처럼 보입니다. 이 경우 최대 슬롯을 연결하려고합니다. void QStackedWidget::currentChanged(int index)

+0

예, 이것을 시도했습니다. connect (stackwidget, SIGNAL (currentChanged (int)), X, 내 슬롯 (update_from_db)); 하지만 X는 무엇이되어야합니까? Thx – Bear

+0

X는 슬롯을 구현하는 개체에 대한 포인터입니다. "slot (update_from_db)"가있는 곳; "SLOT (update_from_db (int)))"이어야합니다. " –

+0

가 나는 가 하지만 난이 이전에 (모든 위젯 창)을 (구문을 무시) 시도 미래 에 보여 주었다 될 개체를 예측할 수 없습니다 {연결하는 슬롯 (구현하는 객체이어야한다 알고 } 그러나 표시되는 위젯 대신 모든 창 위젯을 업데이트합니다. Thx – Bear

2

모든 "페이지"는 QWidget 기반 클래스입니다. 위젯이 제대로 그려지 지 않으면 위젯의 코드를 확인해야합니다. 일반적으로 페이지를 전환하는 동안 보이는 위젯이 다시 그려집니다. 위젯이 일부 이벤트를 처리하지 않으면 결함이 있음을 알 수 있습니다.

어쨌든 "페이지"에 대해 다시 칠하기를 원하면 QWidget::update() 또는 (bruteforce 메소드) QWidget::repaint()으로 전화해야합니다.

+0

+1이라고 표시합니다. 'QWidget :: repaint()'는 아마도 _ 사용되지 않아야한다. 조심하지 않으면 무한합니다. 무한 재귀가 발생할 수 있습니다. – gnud

+0

Thx. 업데이트()를 무시해야한다고 생각합니다. – Bear

+0

죄송 합니다만 아니요, update()를 재정의해서는 안됩니다. 내 대답을 참조하십시오. –

1

제 생각에는이 상황을 처리하는 가장 좋은 방법은 상속을 이용하는 것입니다. 가상 업데이트 기능이있는 QWidget에서 파생되는 클래스를 만듭니다. 이것을 스택 위젯의 모든 페이지에 대한 기본 클래스로 사용하십시오. 누적 위젯을 포함하는 클래스에서 누적 위젯의 currentChanged(int index) 신호에 슬롯을 연결하십시오. 그 슬롯에 현재 위젯 인 qobject_cast을 기본 유형으로 가져오고 (성공하는 경우) 업데이트 기능을 호출합니다.

스택 위젯의 페이지 인 각 클래스는 업데이트 기능을 무시한 다음 필요에 따라 정보를 업데이트해야합니다.