SLT 11에서 QT 4.8.5 (이 버전은 내 고객에게 필수)에서 응용 프로그램 도구 모음을 개발 중입니다. 나는 또한 멀티 모니터 환경.QT 4.8.5 - 팝업 메뉴가 잘못된 위치에 표시됨 - SLED 11
내 목적은 지정된 모니터에 확장 된 툴바를 표시하고 다른 모니터에는 축소 된 툴바를 표시하는 것입니다. 기본 도구 모음에서 시스템에 설치된 다른 응용 프로그램을 열 수 있습니다. 이러한 응용 프로그램은 QT 기반이 될 수도 있고 그렇지 않을 수도 있습니다.
도구 모음을 도킹 창으로 처리하고 바탕 화면의 공간을 확보하려면 (다른 창을 도구 모음에서 이동할 수 없으며 창 최대화 도구 모음이 표시되지 않도록) xlib 호출을 사용했습니다 .
이
내가 공간 예약 방법 :void ToolbarWindow::dock(int x, int y, int width, int height)
{
#ifdef Q_WS_X11 //only define on Qt 4.X
Display *display = QX11Info::display();
// Change the window type in order to make it DOCK.
Atom tmp = XInternAtom(display, "_NET_WM_WINDOW_TYPE_DOCK", False);
XChangeProperty(display,
winId(),
XInternAtom(display, "_NET_WM_WINDOW_TYPE", False),
XA_ATOM ,
32,
PropModeReplace,
(unsigned char *)&tmp, 1);
// Reserve the space.
// [0]left, [1]right, [2]top, [3]bottom, [4]left_start_y, [5]left_end_y, [6]right_start_y, [7]right_end_y, [8]top_start_x, [9]top_end_x, [10]bottom_start_x, [11]bottom_end_x
long insets[12] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
insets[2] = height;
insets[8] = x;
insets[9] = x+width;
XChangeProperty(display,
winId(),
XInternAtom(display, "_NET_WM_STRUT", False),
XA_CARDINAL ,
32,
PropModeReplace,
(unsigned char *)&insets, 4);
XChangeProperty(display,
winId(),
XInternAtom(display, "_NET_WM_STRUT_PARTIAL", False),
XA_CARDINAL ,
32,
PropModeReplace,
(unsigned char *)&insets, 12);
#endif
}
모든 것이 잘 작동하는 것 같다,하지만 몇 가지 테스트 후 나는 QT 드롭 다운 메뉴와 큰 문제가 있었다. QT가 드롭 다운 위치를 계산할 때 윈도우가있는 모니터와 독립적으로 최대 예약 높이를 고려한 것 같습니다.
여기에는 문제를 나타내는 이미지가 두 개 있습니다.
첫 번째 이미지는 QTCreator 드롭 다운 메뉴에서도 문제가 테스트 될 수 있음을 보여줍니다.
두 번째 이미지는 커스텀 QMainWindow에서 콤보 박스 드롭 다운에서 어떤 현상이 발생했는지 확인하기 위해 만든 테스트입니다. 문제가 동일하게 보입니다.
는 또한 두 번째 모니터에 기본 도구 모음의 높이 아래의 창을 이동하면 드롭 위치가 올바른지 추가 할 수 있습니다. 또한 다른 비 QT 애플리케이션에는 이러한 동작이 없으므로 드롭 다운 위치 지정 중에는 QT 4.8.5 문제라고 생각합니다.
- https://bugreports.qt.io/browse/QTBUG-36672
- https://bugreports.qt.io/browse/QTBUG-36984
- https://bugreports.qt.io/browse/QTCREATORBUG-11364 :
또한 맥 OS X에 관련된 유사한 버그 이러한 버그는 의미가 될 수 있을지는 모르지만 어쨌든 그들을 나열합니다 발견
누구든지이 문제의 해결책을 찾는데 도움을 줄 수 있습니까?
고마워요.