Ниже показано, как в системе X11 мы можем модифицировать свойство окна:
#ifdef Q_WS_X11
Atom atom = XInternAtom(QX11Info::display, "MY_PROPERTY", False);
long data = 1;
XChangeProperty(QX11Info::display, window->winId, atom, atom,
32, PropModeReplace, reinterpret_cast
#endif
Использование директив
Приведенный ниже пример показывает, как в приложениях, предназначенных только для Windows, можно использовать вызовы GDI для рисования на виджете Qt:
01 void GdiControl::paintEvent(QPaintEvent * /* event */)
02 {
03 RECT rect;
04 GetClientRect(winId, ▭);
05 HDC hdc = GetDC(winId);
06 FillRect(hdc, ▭, HBRUSH(COLOR_WINDOW + 1));
07 SetTextAlign(hdc, TA_CENTER | TA_BASELINE);
08 TextOutW(hdc, width / 2, height / 2,
09 text.utf16, text.size);
10 ReleaseDC(winId, hdc);
11 }
Чтобы это сработало, мы должны также переопределить функцию
Следующий пример показывает, как можно сочетать
01 void MyWidget::paintEvent(QPaintEvent * /* event */)
02 {
03 QPainter painter(this);
04 painter.fillRect(rect.adjusted(20, 20, -20, -20), Qt::red);
05 #ifdef Q_WS_WIN
06 HDC hdc = painter.paintEngine->getDC;
07 Rectangle(hdc, 40, 40, width - 40, height - 40);
08 painter.paintEngine->releaseDC;
09 #endif
10 }
Подобное совмещение вызовов
Qt определяет один из следующих четырех символов оконной системы:
Мы можем считать, что по крайней мере один из этих символов будет определен. Для удобства Qt также определяет
Кроме макросов операционной и оконной систем существует также ряд макросов компилятора. Например,
Несколько классов графического пользовательского интерфейса Qt обеспечивают зависимые от платформы функции, которые возвращают описатели (handle) базового объекта для низкоуровневой обработки. Они перечислены на рис. 20.2: