2014-06-24 6 views
6

Qt를 기반으로하는 전체 화면 응용 프로그램이 있습니다. 그렇지 않으면 윈도우의 일부가 가려지기 때문에 전체 화면 응용 프로그램이 항상 맨 위에 있어야합니다. 프레임이없는 전체 화면 창에 하위 창 (특수 대화 상자, ..)이 있어야합니다. 이 하위 창은 전체 화면 창 위에 표시되어야합니다. 그것들을 아래에 보여주는 것은별로 의미가 없습니다.Gnome 3에서 Qt를 사용하면 Xfce와 Unity는 하위 창이있는 전체 화면 창을 상단에 유지하지 않습니다.

짧은, 자체 포함 된 예는 다음과 같습니다

from PySide import QtGui, QtCore 

app = QtGui.QApplication([]) 

window = QtGui.QWidget(f=QtCore.Qt.WindowStaysOnTopHint) 

child_window = QtGui.QWidget(window, f=QtCore.Qt.Window) 
child_window.resize(400, 300) 

layout = QtGui.QVBoxLayout(window) 
exit = QtGui.QPushButton('Exit') 
exit.clicked.connect(app.exit) 
layout.addWidget(exit) 
create = QtGui.QPushButton('Create child window') 
create.clicked.connect(child_window.show) 
layout.addWidget(create) 
layout.addStretch() 

window.showFullScreen() 

app.exec_() 

그것은 파이썬으로 작성된 파이썬 3.X + PySide 1.2.2 (Qt는 4.8) + 우분투 14.04 (유니티 데스크톱) 또는 Windows 7에서 테스트입니다. 그러나 C++ Qt (또는 PyQt) 로의 변환은 간단해야합니다.

Windows에서는 모든 것이 처음에 설명 된 것과 같습니다. Qt.WindowsStaysOnTopHint은 필요하지 않지만 우분투에서는 필요하지 않습니다.

우분투에서는 처음에는 전체 화면 메인 창이 모든 항목 위에 있지만 자식 대화 상자 창이 만들어지면 표시됩니다. 일반 데스크톱 장식 (상단 및 왼쪽 막대)은 전체 화면 주 창 위에 표시됩니다. 보기의 일부! 하위 창이 닫히면 전체 화면 창이 다시 맨 위에 표시됩니다.

우분투 및 Qt의 상위 창에 전체 화면 창을 추가하기 위해 수행 할 수있는 작업이 있다면 지금 질문이 생깁니 까?

가능한 경우 OS 특정 코드를 피해야하기 때문에 Windows와 Linux 간의 다른 동작도 만족스럽지 않습니다.


나중에

:

사용 the overview of available desktop environment on Ubuntu 나는 여러 환경을 설치하고 테스트.

KDE, Lubuntu (Lxde?) 및 Openbox는 예상대로 작동합니다 (Windows와 동일). 전체 화면 및 하위 창을 위에 표시하면 상단에 메인 창이 유지됩니다.

Gnome-Shell (Gnome 3), Xfce, Unity 및 Awesome의 경우 바탕 화면 장식은 전체 화면 모드의 맨 위에 있으며 어린이 창도 표시됩니다. Xfce와 Unity는 정확히 동일하게 작동합니다. Gnome과 Awesome은 약간의 추가 문제가 있습니다.

+0

다른 Linux 배포판에서 Qt가 마음에 들지 않으면 어떻게 동작합니까 (예 : 데비안)? 우분투는 적어도 과거에는 특정 비전 (즉, 글로벌 메뉴 바)에 맞추기 위해 일부 Qt를 해킹했습니다."우분투 Qt 버그 메뉴 모음 전체 화면"의 일부 콤보를 검색하면 수많은 문제가 나타납니다. 우분투 상황이 현재 어떤 것인지 전혀 모르겠지만 데비안에서 대화 상자를 사용하여 전체 화면 응용 프로그램을 완성했으며 제대로 작동합니다. NB 우분투! = 리눅스! – timday

+0

KDE (쿠분투)에서는 예상대로 작동합니다. – doru

+0

@doru 잘 알고 있습니다. 그래서 아마 리눅스에서 우분투로 범위를 제한 할 필요가 있습니다. – Trilarion

답변

0

documentation suggests을 시도 했습니까?

Qt는 :: WindowStaysOnTopHint 0x00040000으로는 윈도우가 다른 모든 창 위에 유지해야한다 윈도우 시스템에 통지합니다. 에서 X11의 일부 창 관리자는이 플래그가 올바르게 작동하려면 Qt :: X11BypassWindowManagerHint을 전달해야합니다.

다른 창은 왜 부모가 될 수있는 경우 어린이가되기를 원하십니까?

+0

키보드 포커스 처리가 누락 된 것과 같은 부정적인 부작용 때문에'X11BypassWindowManagerHint'를 지금까지 시도하지는 않았지만 어제 테스트 해 보았고 원하는 효과를 얻지 못했습니다 (올바르게 기억하면 전체 화면이 더 이상 작동하지 않음). – Trilarion

+0

왜 하위 창입니까? 음, 자식 대화 상자가있는 전체 화면 앱이므로 자연스러운 방법입니다. 또한 하위 창은 주로 부모 창 앞에 자동으로 있어야합니다. 또한 하위 창은 작업 표시 줄에 추가 항목을 만들지 않습니다. 하지만 독립 실행 형 윈도우로 시도했지만 아무 것도 변경되지 않았습니다. 업데이트 된 질문. – Trilarion

+0

'X11BypassWindowManagerHint'가 자식 창에 전달되면 데스크톱 장식을 볼 수 없게됩니다. 이 문제를 해결할 수 있었습니까/해결 했습니까? – user362515