2014-04-29 8 views
1

Xlib 기능으로 Qt 윈도우의 속성을 수정하고 싶습니다.Qt 내에서 Xlib 사용

QX11Info를 사용하여 디스플레이를 가져오고 QWidget :: winId를 사용하여 창을 가져 왔습니다.

Display *display = QX11Info::display(); 
int window = QWidget::winId(); 

XMoveResizeWindow(display, window, 100, 100, 400, 400); 

하지만 작동하지 않았습니다. 아마도 윈도우 QWidget::winId() 반환 응용 프로그램의 주요 하나가 아니라고 생각. 그래서 부모를 수정하여 올바른 창인지 확인하려고했습니다.

Display *display = QX11Info::display(); 
int window = QWidget::winId(); 

unsigned int nbChildren; 
Window root,parent,*children; 
XQueryTree(display, window, &root, &parent, &children, &nbChildren); 

XMoveResizeWindow(display, parent, 100, 100, 400, 400); 

하지만 작동하지 않았습니다. 두 예제 모두 XStoreName(display, window, "test Qt");도 시도했습니다. 문제는 윈도우가 복원 할 수 없다는 것일 수 있습니다.

Qt를 사용하여 이런 종류의 작업을 직접 수행해야하지만 올바른 창 ID를 얻을 수 있는지 쉽게 확인할 수 있습니다. 내 목표는 세관 xlib 인턴 원자를 사용하여 창 속성을 변경하는 것입니다.

내가 뭘 잘못하고 있는지 알고 싶습니다.

감사합니다.

+1

창 관리자를 실행하지 않고 다시 시도하십시오. 대부분의 WM은 모든 최상위 오버라이드 리디렉션 윈도우 이동/크기 조정 요청을 무시합니다. –

답변

1

오류가 발견되었습니다. 문제는 창을 표시하기 전에 이러한 기능을 사용하고 있다는 것입니다.

Display *display = QX11Info::display(); 
int window = QWidget::winId(); 

XMoveResizeWindow(display, window, 100, 100, 400, 400); 

"show()"다음에 사용하면 작동합니다.

죄송합니다.