Жасмин Бланшет - QT 4: программирование GUI на С++

Тут можно читать онлайн Жасмин Бланшет - QT 4: программирование GUI на С++ - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming, издательство КУДИЦ-ПРЕСС, год 2007. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    QT 4: программирование GUI на С++
  • Автор:
  • Жанр:
  • Издательство:
    КУДИЦ-ПРЕСС
  • Год:
    2007
  • Город:
    Москва
  • ISBN:
    978-5-91136-038-2
  • Рейтинг:
    3.75/5. Голосов: 121
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Жасмин Бланшет - QT 4: программирование GUI на С++ краткое содержание

QT 4: программирование GUI на С++ - описание и краткое содержание, автор Жасмин Бланшет, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Единственное официальное руководстро по практическому программированию в среде Qt 4.1.

Применяя средства разработки Qt компании «Trolltech», вы сможете создавать на С++ промышленные приложения, которые естественно работают в средах Windows, Linux/UNIX, Linux для встроенных систем без изменения программного кода и Mac Os X. Книга написана сотрудниками компании «Trolltech». Она представляет собой практическое руководство по успешному применению самой мощной из всех созданных до сих пор версий Qt — Qt 4.1.

Из книги «Qt 4: программирование GUI на С++» вы узнаете о наиболее эффективных приемах и методах программирования с применением Qt 4 и овладеете ключевыми технологиями в самых различных областях — от архитектуры Qt модель/представление до мощного графического процессора 2D. Авторы вооружают читателей беспрецедентно глубокими знаниями модели событий и системы компоновки Qt.

На реалистических примерах они описывают высокоэффективные методы во всех областях — от разработки основных элементов графического пользовательского интерфейса до передовых методов интеграции с базой данных и XML. Каждая глава содержит полностью обновленный материал.

Данное издание:

• Включает новые главы по архитектуре Qt 4 модель/представление и поддержке подключаемых модулей Qt, а также краткое введение в программирование встроенных систем на платформе Qtopia.

• Раскрывает все основные принципы программирования в среде Qt — от создания диалоговых и других окон до реализации функциональности приложений.

• Знакомит с передовыми методами управления компоновкой виджетов и обработкой событий.

• Показывает, как можно с наибольшей эффективностью использовать новые программные интерфейсы Qt 4, в частности мощный графический процессор 2D и новые простые в применении классы—контейнеры.

• Представляет передовые методы Qt 4, которых нет ни в одной книге: от создания подключаемых модулей, расширяющих возможности Qt, и приложений, до применения «родных» для конкретной платформы программных интерфейсов.

• Содержит приложение с подробным введением в программирование на С++ в среде Qt для опытных Java—разработчиков.


Жасмин Бланшет (Jasmine Blanchette) — менеджер по документированию и старший разработчик компании «Trolltech» с 2001 года. Он является редактором «Qt Quarterly», информационного бюллетеня компании «Trolltech», и соавтором книги «Qt 3: программирование GUI на С++».

Марк Саммерфилд (Mark Summerfield) — независимый преподаватель и консультант по С++, Qt и Python. Он работал менеджером по документированию в компании «Trolltech» на протяжении трех лет. Марк является соавтором книги «Qt 3: программирование GUI на С++».

QT 4: программирование GUI на С++ - читать онлайн бесплатно полную версию (весь текст целиком)

QT 4: программирование GUI на С++ - читать книгу онлайн бесплатно, автор Жасмин Бланшет
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Новые классы—оболочки подключаемых модулей должны быть подклассом QImageIOPlugin и должны обеспечить реализацию нескольких виртуальных функций:

01 class CursorPlugin : public QImageIOPlugin

02 {

03 public:

04 QStringList keys() const;

05 Capabilities capabilities(QIODevice *device,

06 const QByteArray &format) const;

07 QImageIOHandler *create(QIODevice *device,

08 const QByteArray &format) const;

09 };

Функция keys() возвращает список форматов изображений, которые поддерживает подключаемый модуль. Можно считать, что параметр format функций capabilities() и create() имеет значение из этого списка.

01 QStringList CursorPlugin::keys() const

02 {

03 return QStringList() << "cur";

04 }

Наш подключаемый модуль поддерживает один формат изображений, поэтому возвращается список, содержащий только одно название. В идеале это название должно совпадать с расширением файла, используемым данным форматом. Если форматы имеют несколько расширений (например, .jpg и .jpeg для JPEG), мы можем возвращать список с несколькими элементами, относящимися к одному формату, — по одному элементу на каждое расширение.

01 QImageIOPlugin::Capabilities

02 CursorPlugin::capabilities(QIODevice *device,

03 const QByteArray &format) const

04 {

05 if (format == "cur")

06 return CanRead;

07 if (format.isEmpty()) {

08 CursorHandler handler;

09 handler.setDevice(device);

10 if (handler.canRead())

11 return CanRead;

12 }

13 return 0;

14 }

Функция capabilities() возвращает объект, который показывает, что может делать с данным форматом изображений обработчик изображений. Существует три возможных действия (CanRead, CanWrite и CanReadIncremental), а возвращаемое значение объединяет допустимые варианты порязрадной логической операцией ИЛИ.

Если формат «cur», наша реализация возвращает CanRead. Если формат не задан, мы создаем обработчик курсора и проверяем его способность чтения данных с заданного устройства. Функция canRead() только просматривает данные и проверяет возможность распознавания файла, не изменяя указатель файла. Возвращение 0 означает, что данный обработчик не может ни считывать, ни записывать файл.

01 QImageIOHandler *CursorPlugin::create(QIODevice *device,

02 const QByteArray &format) const

03 {

04 CursorHandler *handler = new CursorHandler;

05 handler->setDevice(device);

06 handler->setFormat(format);

07 return handler;

08 }

Когда файл курсора открыт (например, с помощью класса QImageReader), будет вызвана функция оболочки подключаемого модуля create() с передачей указателя устройства и формата «cur». Мы создаем экземпляр CursorHandler для заданного устройства и формата. Вызывающая программа становится владельцем обработчика и удалит его, когда он не станет нужен. Если приходится считывать несколько файлов, для каждого из них создается новый обработчик.

Q_EXPORT_PLUGIN2(cursorplugin, CursorPlugin)

В конце файла .cpp мы используем макрос Q_EXPORT_PLUGIN2(), чтобы гарантировать распознавание в Qt подключаемого модуля. В первом параметре задается произвольное имя, используемое нами для подключаемого модуля. Второй параметр содержит имя класса подключаемого модуля.

Подкласс QImageIOPlugin создается достаточно просто. Реальная работа подключаемого модуля делается обработчиком. Обработчики форматов изображений должны создать подкласс QImageIOHandler и переопределить некоторые или все его открытые функции. Сначала рассмотрим заголовочный файл:

01 class CursorHandler : public QImageIOHandler

02 {

03 public:

04 CursorHandler();

05 bool canRead() const;

06 bool read(QImage *image);

07 bool jumpToNextImage();

08 int currentImageNumber() const;

09 int imageCount() const;

10 private:

11 enum State { BeforeHeader, BeforeImage, AfterLastImage, Error };

12 void readHeaderIfNecessary() const;

13 QBitArray readBitmap(int width, int height, QDataStream &in) const;

14 void enterErrorState() const;

15 mutable State state;

16 mutable int currentImageNo;

17 mutable int numImages;

18 };

Открытые функции имеют фиксированную сигнатуру. Здесь нет некоторых функций, которые не надо переопределять в обработчике, обеспечивающем только чтение, в частности отсутствует функция write(). Переменные—члены объявляются с ключевым словом mutable, потому что они изменяются внутри константных функций.

01 CursorHandler::CursorHandler()

02 {

03 state = BeforeHeader;

04 currentImageNo = 0;

05 numImages = 0;

06 }

После создания обработчика мы сначала настраиваем его параметры. Номер текущего изображения курсора устанавливается на первый курсор, но поскольку переменная количества изображений numImages принимает значение 0, ясно, что у нас пока еще нет изображений.

01 bool CursorHandler::canRead() const

02 {

03 if (state == BeforeHeader) {

04 return device()->peek(4) == QByteArray("\0\0\2\0", 4);

05 } else {

06 return state != Error;

07 }

08 }

Функция canRead() может вызываться в любой момент для определения возможности считывания обработчиком изображений дополнительных данных с устройства. Если функция вызывается до чтения данных в состоянии BeforeHeader, выполняется проверка конкретной метки, по которой опознаются файлы курсоров в Windows. Вызов QIODevice::peek() считывает первые четыре байта без изменения указателя файла на данном устройстве. Если функция canRead() вызывается позже, мы возвращаем true при отсутствии ошибки.

01 int CursorHandler::currentImageNumber() const

02 {

03 return currentImageNo;

04 }

Эта простая функция возвращает номер курсора, на который позиционирован указатель файла устройства.

После создания обработчика пользователь может вызвать любую его открытую функцию, причем последовательность вызовов функций может быть произвольной. В этом кроется потенциальная проблема, поскольку необходимо исходить из того, что файл можно читать только последовательно, поэтому сначала надо один раз считать заголовок файла и затем выполнять какие-то другие действия. Эту проблему решаем путем вызова readHeaderIfNecessary() в тех функциях, для которых требуется предварительное считывание заголовка файла.

01 int CursorHandler::imageCount() const

02 {

03 readHeaderIfNecessary();

04 return numImages;

05 }

Эта функция возвращает количество изображений, содержащихся в файле. Для правильного файла, при чтении которого не возникает ошибок, она возвращает по крайней мере 1.

Рис 192 Формат файла cur Следующая функция довольно сложная поэтому мы - фото 169

Рис. 19.2. Формат файла .cur.

Следующая функция довольно сложная, поэтому мы рассмотрим ее по частям:

01 bool CursorHandler::read(QImage *image)

02 {

03 readHeaderIfNecessary();

04 if (state != BeforeImage)

05 return false;

Функция read() считывает данные изображения, начинающегося в текущей позиции указателя устройства. Если успешно считан заголовок файла или указатель устройства после чтения изображения находится в начале другого изображения, можно считывать следующее изображение.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Жасмин Бланшет читать все книги автора по порядку

Жасмин Бланшет - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




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


Отзывы читателей о книге QT 4: программирование GUI на С++, автор: Жасмин Бланшет. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x