Саммерфилд Марк
Шрифт:
Кроме представленных здесь возможностей компания «Trolltech» предлагает несколько зависимых от платформы решений в рамках проекта Qt Solutions, в частности миграционные фреймворки Qt/Motif и Qt/MFC, позволяющие упростить перевод в Qt приложений Motif/Xt и MFC. Подобное расширение для приложений Tcl/Tk обеспечивается фирмой «Froglogic», а компанией «Klaralvdalens Datakonsult» разработан конвертор ресурсов Windows компании Microsoft. Дополнительную информацию вы найдете на следующих веб-страницах:
• http://www.trolltech.com/products/solutions/catalog/
• http://www.froglogic.com/tq/
• http://www.kdab.net/knut/
Для встроенных приложений компания «Trolltech» обеспечивает Qtopia — рабочую среду для разработки таких приложений. Она рассматривается в главе 21 .
Применение «родных» программных интерфейсов
Всесторонний программный интерфейс Qt удовлетворяет большинству требований на всех платформах, но при некоторых обстоятельствах нам может потребоваться базовый, платформозависимый программный интерфейс. В данном разделе мы продемонстрируем способы применения «родных» программных интерфейсов различных платформ, поддерживаемых Qt, для решения конкретных задач.
Для каждой платформы класс QWidget поддерживает функцию winId, которая возвращает идентификатор или описатель окна. QWidget также обеспечивает статическую функцию find, которая возвращает QWidget с идентификатором конкретного окна. Мы можем передавать этот идентификатор функциям «родного» программного интерфейса для достижения эффектов, зависимых от платформы. Например, в следующем программном коде используется функция winId для отображения слева заголовка панели инструментов, используя «родные» функции Mac OS X:
Рис. 20.1. Окно панели инструментов Mac OS X с отображением заголовка сбоку.
Ниже показано, как в системе X11 мы можем модифицировать свойство окна:
Использование директив #ifdef и #endif вокруг зависимого от платформы программного кода гарантирует компиляцию приложения на других платформах.
Приведенный ниже пример показывает, как в приложениях, предназначенных только для Windows, можно использовать вызовы GDI для рисования на виджете Qt:
Чтобы это сработало, мы должны также переопределить функцию QPaintDevice::paintEngine для возврата нулевого указателя и установить атрибут Qt::WA_PaintOnScreen в конструкторе виджета.
Следующий пример показывает, как можно сочетать QPainter и GDI в обработчике события рисования, используя функции getDC и releaseDC класса QPaintEngine: