2016-09-28 1 views
1

Qt 응용 프로그램이 다른 창 위에 남아 있습니다. 메인 윈도우는 프레임이없고 투명합니다. 다른 창 위에 놓으려면 다음 절차를 따라야합니다.Qt 애플리케이션 메인 윈도우를 Windows의 작업 표시 줄 위에 항상 배치 할 수 있습니까?

SetForegroundWindow((HWND)winId()); 
Qt::WindowFlags flags = this->windowFlags(); 
flags = flags & ~Qt::WindowMinimizeButtonHint; 
this->setWindowFlags(flags|Qt::FramelessWindowHint|Qt::WindowStaysOnTopHint); 
ui.setupUi(this); 

이 코드 단편은 내 Qt 메인 윈도우를 모든 윈도우 상단과 작업 표시 줄 위에 가져옵니다. 문제는 작업 표시 줄의 모든 영역을 클릭 할 때마다 주 창 영역이 작업 표시 줄에서 작업 표시 줄 뒤에 있음을 의미합니다. 작업 표시 줄이 앞에옵니다. 메인 윈도우는 여전히 다른 모든 윈도우 위에 남아 있습니다. 메인 윈도우의 맨 아래 부분이 작업 표시 줄 뒤에 있습니다.

어떻게하면 작업 표시 줄에 메인 윈도우의 영역을 뒤로 밀지 못하게 할 수 있습니까? 창을 모든 창 위에두고 작업 표시 줄 위에 유지하고 싶습니다.

+1

이 디자인이 훌륭한 사용자 환경을 제공하는지 확인해 주시겠습니까? 사용자로서 무언가가 항상 작업 표시 줄을 가릴려고하면 큰 기분이 될 것입니다 ... –

답변

2

수 없습니다. Qt::WindowsStaysOnTopHintWS_EX_TOPMOST 창 스타일로 창을 표시하며 모든 창은 서로 위에 놓일 수 있습니다. Raymond Chen의 가끔씩 The Old New Thing에 관한 호언 장담을보십시오.

가장 좋은 방법은 작업 표시 줄 위에 이동할 수 없도록 창의 위치를 ​​제한하는 것입니다.

0

당신은 윈도우 API에 액세스 할 수 있습니다 또는 Qt는 당신이 사용할 수있는 동등한 기능이있는 경우 SetWindowPos

예를 들어

HWND 당신의 창 너비와 높이에 대한 핸들입니다
SetWindowPos(hWnd, ((HWND)-1), 0, 0, width, height, 0); 

은 폭과 높이입니다 (전체 화면을 원할 경우). -1을 HWND로 전달하면 윈도우를 최상위가 아닌 다른 모든 윈도우 위에 놓습니다. 창이 비활성화 된 후에도 맨 위에 계속 표시됩니다.

0

답변 해 주셔서 감사합니다. The Old New Thing 블로그에 대한 참고 자료를 제공해 주신 Martin Bonner에게 감사드립니다.

나는 타이머를 사용하고 다른 작업 표시 줄 위에 내 창을 올려서 대안을 시도했다. 내 창은 제목 표시 줄과 상태 표시 줄이없이 완전히 투명합니다. 사각형 테두리와 아래쪽에 몇 개의 단추 만 있습니다.

작업 표시 줄 위에서 500ms마다 창을 올리고 있습니다. 따라서 사용자가 작업 표시 줄의 아무 곳이나 클릭하면 작업 표시 줄 뒤에있는 내 창 부분이 다시 앞으로옵니다.

if (this->isActiveWindow() == false) 
    this->raise(); 

예 다른 응용 프로그램이 비슷한 접근 방식을 사용하여 작업 표시 줄 위에 올라가는 경우이 방법으로 주변 조건을 유발할 수 있습니다. 그래서이 방법이 올바르게 작동하는지 확인해야합니다. 비슷한 방법으로 두 응용 프로그램을 함께 실행하면 안됩니다.

관련 문제