Для каждой платформы класс
#ifdef Q_WS_MAC
ChangeWindowAttributes(HIViewGetWindow(HIViewRef(toolWin.winId())),
kWindowSideTitlebarAttribute, kWindowNoAttributes);
#endif
Ниже показано, как в системе 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 определяет один из следующих четырех символов оконной системы: