2014-10-20 2 views
1

Qt 응용 프로그램을 사용하고 있으며 액세스 가능성 인터페이스를 통해 UI 자동화를 구현하려고합니다. 이 모든 것은이 응용 프로그램이 QMdiSubWindow을 포함하는 QMdiArea을 가지며이 하위 창에 포함 된 것이 자동화 인터페이스에 완전히 불투명하다는 사실을 제외하고는 모두 잘 작동합니다. 나는 다음과 같은 보여주는 윈도우 SDK에서 UIAVerify을 통해 요소를 검사하려고 :QMdiSubWindows가 포함 된 QMdiArea가 내게 필요한 옵션 API에 표시되지 않습니다.

MDI area

이 하위 창은 표준 Qt는 위젯을 포함하는 표준 그리드 레이아웃이 포함되어 있습니다. 여기에있는 기적은 전적으로 표준 Qt 위젯으로 구성되어 있으며 모든 표준 Qt 위젯은 MSAA에서 정의한대로 액세스 인터페이스를 구현합니다. GUI의 다른 모든 영역에서 요소에 자유롭게 액세스 할 수있는 이유는 MDI 영역의 모든 요소가 숨겨진 이유를 이해하지 못합니다 .

답변

4

이유는 Qt이 해당 컨트롤을 유효한 windows으로 등록하지 않았기 때문일 수 있습니다. Qt의 모든 컨트롤은 하나의 캔버스에 그려져 있습니다. 최적화를 위해 만들어졌습니다.

이러한 Qt 컨트롤을 alien widgets이라고합니다.

좋은 소식은 Windows에서 모든 컨트롤을 Qt에 등록 할 수 있다는 것입니다. documentation에는 다음과 같은 몇 가지 방법이 나와 있습니다.

  • 환경에서 QT_USE_NATIVE_WINDOWS = 1을 사용하십시오.
  • 응용 프로그램에 Qt :: AA_NativeWindows 특성을 설정하십시오. 모든 위젯은 기본 위젯입니다.
  • 위젯에서 Qt :: WA_NativeWindow 속성 설정 : 위젯 자체 및 모든 조상이 Qt :: WA_DontCreateNativeAncestors가 설정되지 않은 경우 네이티브가됩니다.
  • QWidget :: winId를 호출하여 기본 창을 적용합니다 (3을 의미 함).
  • Qt :: WA_PaintOnScreen 특성을 설정하여 기본 창을 적용합니다 (3을 의미 함).

첫 번째 프로그램은 가장 쉽고 프로그램을 다시 컴파일하지 않습니다.

나는 UIAVerify과 그것을 시도하고 MDI 컨트롤의 전체 트리를 가지고.

+0

감사합니다. 환경 변수를 설정하면 충분합니다. 이것은 여전히 ​​버그처럼 보입니다. – sjdowling

+0

반갑습니다. – Ezee

관련 문제