Чтение онлайн

на главную - закладки

Жанры

QT 4: программирование GUI на С++

Саммерфилд Марк

Шрифт:

11 }

Чтобы это сработало, мы должны также переопределить функцию QPaintDevice::paintEngine для возврата нулевого указателя и установить атрибут Qt::WA_PaintOnScreen в конструкторе виджета.

Следующий пример показывает, как можно сочетать QPainter и GDI в обработчике события рисования, используя функции getDC и releaseDC класса QPaintEngine:

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 }

Подобное

совмещение вызовов QPainter и GDI иногда может дать странный результат, особенно когда вызовы QPainter выполняются после вызовов GDI, потому что QPainter делает некоторые предположения о состоянии базового уровня рисования.

Qt определяет один из следующих четырех символов оконной системы: Q_WS_WIN, Q_WS_X11, Q_WS_MAC и Q_WS_QWS (Qtopia). Мы должны обеспечить включение хотя бы одного заголовка Qt перед их использованием в приложениях. Qt также обеспечивает препроцессорные символы для идентификации операционной системы:

• Q_OS_AIX

• Q_OS_BSD4

• Q_OS_BSDI

• Q_OS_CYGWIN

• Q_OS_DGUX

• Q_OS_DYNIX

• Q_OS_FREEBSD

• Q_OS_HPUX

• Q_OS_HURD

• Q_OS_IRIX

• Q_OS_LINUX

• Q_OS_LYNX

• Q_OS_MAC

• Q_OS_NETBSD

• Q_OS_OPENBSD

• Q_OS_OS2EMX

• Q_OS_OSF

• Q_OS_QNX6

• Q_OS_QNX

• Q_OS_RELIANT

• Q_OS_SCO

• Q_OS_SOLARIS

• Q_OS_ULTRIX

• Q_OS_UNIXWARE

• Q_OS_WIN32

• Q_OS_WIN64

Мы

можем считать, что по крайней мере один из этих символов будет определен. Для удобства Qt также определяет Q_OS_WIN, когда обнаруживается Win32 или Win64, и Q_OS_UNIX, когда обнаруживается любая операционная система типа Unix (включая Linux и Mac OS X). Во время выполнения приложений мы можем проверить QSysInfo::WindowsVersion или QSysInfo::MacintoshVersion для установки отличий между различными версиями Windows (2000, ME и так далее) или Mac OS X (10.2, 10.3 и так далее).

Кроме макросов операционной и оконной систем существует также ряд макросов компилятора. Например, Q_CC_MSVC определяется в том случае, если компилятором является Visual С++ компании Microsoft. Такие макросы полезны, когда приходится обходить ошибки компилятора.

Несколько классов графического пользовательского интерфейса Qt обеспечивают зависимые от платформы функции, которые возвращают описатели (handle) базового объекта для низкоуровневой обработки. Они перечислены на рис. 20.2:

Mас OS X:

• ATSFontFormatRef QFont::handle;

• CGImageRef QPixmap::macCGHandle;

• GWorldPtr QPixmap::macQDAlphaHandle;

• GWorldPtr QPixmap::macQDHandle;

• RgnHandle QRegion::handle;

• HIViewRef QWidget::winId;

Windows:

• HCURSOR QCursor::handle;

• HDC QPaintEngine::getDC;

• HDC QPrintEngine::getPrinterDC;

• HFONT QFont::handle;

• HPALETTE QColormap::hPal;

• HRGN QRegion::handle;

• HWND QWidget::winId;

X11:

• Cursor QCursor::handle;

• Font QFont::handle;

• Picture QPixmap::x11PictureHandle;

• Picture QWidget::x11PictureHandle;

• Pixmap QPixmap::handle;

• QX11Info QPixmap::x11Info;

• QX11Info QWidget::x11Info;

• Region QRegion::handle;

• Screen QCursor::x11Screen;

• SmcConn QSessionManager::handle;

• Window QWidget::handle;

• Window QWidget::winId;

Поделиться:
Популярные книги

Газлайтер. Том 10

Володин Григорий
10. История Телепата
Фантастика:
боевая фантастика
5.00
рейтинг книги
Газлайтер. Том 10

На границе империй. Том 7. Часть 2

INDIGO
8. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
6.13
рейтинг книги
На границе империй. Том 7. Часть 2

Звездная Кровь. Изгой

Елисеев Алексей Станиславович
1. Звездная Кровь. Изгой
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Звездная Кровь. Изгой

Хозяин Теней 4

Петров Максим Николаевич
4. Безбожник
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Хозяин Теней 4

Картофельное счастье попаданки

Иконникова Ольга
Фантастика:
фэнтези
5.00
рейтинг книги
Картофельное счастье попаданки

Экзорцист: Проклятый металл. Жнец. Мор. Осквернитель

Корнев Павел Николаевич
Фантастика:
фэнтези
героическая фантастика
5.50
рейтинг книги
Экзорцист: Проклятый металл. Жнец. Мор. Осквернитель

Доктора вызывали? или Трудовые будни попаданки

Марей Соня
Фантастика:
юмористическая фантастика
попаданцы
5.00
рейтинг книги
Доктора вызывали? или Трудовые будни попаданки

Метатель

Тарасов Ник
1. Метатель
Фантастика:
боевая фантастика
попаданцы
рпг
фэнтези
фантастика: прочее
постапокалипсис
5.00
рейтинг книги
Метатель

Моя на одну ночь

Тоцка Тала
Любовные романы:
современные любовные романы
короткие любовные романы
5.50
рейтинг книги
Моя на одну ночь

Чехов. Книга 2

Гоблин (MeXXanik)
2. Адвокат Чехов
Фантастика:
фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Чехов. Книга 2

Хозяин Теней 2

Петров Максим Николаевич
2. Безбожник
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Хозяин Теней 2

Сумеречный стрелок 7

Карелин Сергей Витальевич
7. Сумеречный стрелок
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сумеречный стрелок 7

Жизнь под чужим солнцем

Михалкова Елена Ивановна
Детективы:
прочие детективы
9.10
рейтинг книги
Жизнь под чужим солнцем

Красноармеец

Поселягин Владимир Геннадьевич
1. Красноармеец
Фантастика:
боевая фантастика
попаданцы
4.60
рейтинг книги
Красноармеец