2011-09-29 6 views
1

윈도우에서 show()를 호출하면 여러 컨트롤이 있고 모든 컨트롤이 표시됩니다.qt showEvent()에 대한 컨트롤 숨기기

컨트롤 중 하나는 QFrame에서 상속되는 사용자 지정 컨트롤입니다.

특정 플래그가 설정된 경우이 컨트롤을 숨기려고합니다. 그래서, 가지고있어

void MyCustomControl::showEvent (QShowEvent * /* evt */) 
{ 
    if (!m_visibleAllowed) 
     hide(); 
} 

이것은 컨트롤을 숨기고 있지만 컨트롤을 구피하게 만든다. 얼어 붙어 보인다. 창 크기를 조정하면 컨트롤이 있어야하는 영역이 새로 고쳐지지 않습니다. 포럼 주위를 검색 할 때 얻은 아이디어는 컨트롤을 숨기는 것이 showEvent()에서 수행되지 않아야한다는 것입니다. 그렇다면 어떻게/어디에서 컨트롤을 숨기려고해야합니까? showEvent()에서 컨트롤을 숨길 수 있다면 어떻게 컨트롤이 멈추는 것을 막을 수 있습니까?

시간 내 주셔서 감사합니다.

답변

5

show 이벤트 중에 hide()를 호출하는 데 문제가있는 경우 (명시 적으로 허용되지 않았지만 일반적으로 좋은 생각처럼 들리지 않음) 쇼 이벤트에서 hide를 호출하는 위치는 어디입니까?

QTimer::singleShot(0, this, SLOT(hide())); 

단순히 이벤트 루프의 다음 라운드까지 hide() 기능의 실행을 연기합니다 : 당신은 정말 당신이 하나의 샷 타이머를 사용할 수있는이 코드가 필요합니다.

+0

감사합니다. 그랬습니다. –

1

QStackedLayout 또는 QStackedWidget을 사용할 수 있습니다. 컨트롤에는 두 개의 위젯이 있습니다 : 컨트롤과 "빈"QWidget. 그렇게했다면, 컨트롤에서 show() 및 hide()를 사용하는 대신 스택 맨 위에있는 것을 전환합니다.

그런 식으로 숨겨진 위젯을 렌더링하지 않으려 고합니다. 컨트롤이 보이지 않으면 대신 빈 QWidget을 렌더링하십시오. 그러면 그래픽 결함을 해결할 수있을 것으로 생각됩니다.

희망이 도움이됩니다.

관련 문제