2014-07-23 5 views
1

QMainWindow으로 자식을 내 메인 QMainWindow으로 사용합니다. 이를 통해 도킹 가능한 위젯 (QDockWidget)에 사용할 수있는 다른 영역이 생겼습니다.플로팅 하위 QMainWindow (QMainWindow는 메인 QMainWindow의 하위 위젯)

다음 게시물에 따르면 이것이 정상이며 나에게도 완벽하게 작동합니다.

  1. https://qt-project.org/forums/viewthread/17519
  2. http://www.qtcentre.org/threads/12569-QMainWindow-as-a-child-of-QMainWindow

내가 윈도우 플래그를 설정 해제의 QMainWindow 정상적인 위젯으로 행동하려면,이 트릭은 위의 게시물 중 하나에 언급되어있다.

이제 모든 자식 도킹 된 위젯으로이 하위 QMainWindow을 플로팅 할 수 있기를 바랍니다. 다시 말해서, "정상적인 위젯으로 만들기"단계를 되돌리고 싶습니다. 불행히도, 이것은 작동하지 않습니다. 메인 윈도우에서 사라졌지만 보이지 않습니다.

문제를 해결하려면 어떤 방법이 필요합니까? 관련

// this is the child QMainWindow 
if (this->m_infoAreaFloating) 
{ 
    // this should give me a floating window besides the main window 
    this->setWindowFlags(Qt::Desktop); 
    this->show(); 
} 
else 
{ 
    // make this compliant as QWidget 
    this->setWindowFlags(this->windowFlags() & ~Qt::Window); 
} 

: a, b

답변

2

Qt::Desktop 국기 표시는 직접 설정 해야하는 것이 아닙니다. this->windowFlags() & ~Qt::Window에 아무 소용이 없다

setWindowFlags(m_infoAreaFloating ? Qt::Window : Qt::Widget); 
show(); 

:

당신은 Qt::Window 플래그를 설정해야 고독한 Qt::Window 플래그를 설정할 때 다른 모든 윈도우 플래그를 클리어했습니다. 플래그를 완벽하게 제어 할 수 있으므로 "기타"플래그를 유지할 필요가 없습니다.