Жасмин Бланшет - 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 на С++ - читать книгу онлайн бесплатно, автор Жасмин Бланшет
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Теперь мы рассмотрим главную форму, которая реализует подход «master—detail». Главный вид представляет собой список компакт-дисков. Вид описания деталей представляет собой список дорожек текущего компакт-диска. Это диалоговое окно является главным окном приложения CD Collection (Коллекция компакт-дисков); оно показано на рис. 13.1.

01 class MainForm : public QWidget

02 {

03 Q_OBJECT

04 public:

05 MainForm();

06 private slots:

07 void addCd();

08 void deleteCd();

09 void addTrack();

10 void deleteTrack();

11 void editArtists();

12 void currentCdChanged(const QModelIndex &index);

13 void beforeInsertCd(QSqlRecord &record);

14 void beforeInsertTrack(QSqlRecord &record);

15 void refreshTrackViewHeader();

16 private:

17 enum {

18 Cd_Id = 0,

19 Cd_Title = 1,

20 Cd_ArtistId = 2,

21 Cd_Year = 3

22 };

23 enum {

24 Track_Id = 0,

25 Track_Title = 1,

26 Track_Duration = 2,

27 Track_CdId = 3

28 };

29 QSqlRelationalTableModel *cdModel;

30 QSqlTableModel *trackModel;

31 QTableView *cdTableView;

32 QTableView *trackTableView;

33 QPushButton *addCdButton;

34 QPushButton *deleteCdButton;

35 QPushButton *addTrackButton;

36 QPushButton *deleteTrackButton;

37 QPushButton *editArtistsButton;

38 QPushButton *quitButton;

39 };

Мы используем для таблицы компакт-дисков cd модель QSqlRelationalTableModel, а не простую модель QSqlTableModel, потому что нам придется работать с внешними ключами. Мы рассмотрим по очереди все функции, начиная с конструктора, который мы разобьем на несколько секций из-за его большого размера.

01 MainForm::MainForm()

02 {

03 cdModel = new QSqlRelationalTableModel(this);

04 cdModel->setTable("cd");

05 cdModel->setRelation(Cd_ArtistId,

06 QSqlRelation("artist", "id", "name"));

07 cdModel->setSort(Cd_Title, Qt::AscendingOrder);

08 cdModel->setHeaderData(Cd_Title, Qt::Horizontal, tr("Title"));

09 cdModel->setHeaderData(Cd_ArtistId, Qt::Horizontal, tr("Artist"));

10 cdModel->setHeaderData(Cd_Year, Qt::Horizontal, tr("Year"));

11 cdModel->select();

Конструктор начинается с настройки модели QSqlRelationalTableModel, которая управляет таблицей cd. Вызов setRelation() указывает модели на то, что ее поле artistid (индекс которого находится в переменной Cd_ArtistId) содержит идентификатор id внешнего ключа из таблицы артистов artist и что вместо идентификаторов необходимо выводить на экран содержимое соответствующего поля name. Если пользователь переходит в режим редактирования этого поля (например, нажимая клавишу F2), модель автоматически выведет на экран поле с выпадающим списком имен всех артистов, и если пользователь выбирает другого артиста, таблица cd будет обновлена.

12 cdTableView = new QTableView;

13 cdTableView->setModel(cdModel);

14 cdTableView->setItemDelegate(new QSqlRelationalDelegate(this));

15 cdTableView->setSelectionMode(QAbstractItemView::SingleSelection);

16 cdTableView->setSelectionBehavior(QAbstractItemView::SelectRows);

17 cdTableView->setColumnHidden(Cd_Id, true);

18 cdTableView->resizeColumnsToContents();

Настройка представления таблицы cd выполняется аналогично тому, что мы уже делали. Единственным существенным отличием является применение QSqlRelationalDelegate вместо делегата по умолчанию. Именно этот делегат обеспечивает работу с внешними ключами.

19 trackModel = new QSqlTableModel(this);

20 trackModel->setTable("track");

21 trackModel->setHeaderData(Track_Title, Qt::Horizontal, tr("Title"));

22 trackModel->setHeaderData(Track_Duration, Qt::Horizontal,

23 tr("Duration"));

24 trackTableView = new QTableView;

25 trackTableView->setModel(trackModel);

26 trackTableView->setItemDelegate(

27 new TrackDelegate(Track_Duration, this));

28 trackTableView->setSelectionMode(QAbstractItemView::SingleSelection);

29 trackTableView->setSelectionBehavior(QAbstractItemView::SelectRows);

Для дорожек мы собираемся выводить на экран только названия песен и их длительности, поэтому достаточно использовать модель QSqlTableModel. (Поля id и cdid, используемые в рассмотренном ниже слоте currentCdChanged(), не выводятся на экран.) Единственно, на что следует обратить внимание в этой части программного кода, — это использование разработанного в главе 10класса TrackDelegate, показывающего времена дорожек в виде «минуты:секунды» и позволяющего их редактировать с помощью удобного класса QTimeEdit.

Создание представлений и кнопок, их компоновка и соединения сигнал—слот не содержат ничего особенного, поэтому из оставшейся части конструктора мы покажем только несколько не совсем очевидных соединений.

30 …

31 connect(cdTableView->selectionModel(),

32 SIGNAL(currentRowChanged(const QModelIndex &,

33 const QModelIndex &)),

34 this, SLOT(currentCdChanged(const QModelIndex &)));

35 connect(cdModel, SIGNAL(beforeInsert(QSqlRecord &)),

36 this, SLOT(beforeInsertCd(QSqlRecord &)));

37 connect(trackModel, SIGNAL(beforeInsert(QSqlRecord &)),

38 this, SLOT(beforeInsertTrack(QSqlRecord &)));

39 connect(trackModel, SIGNAL(rowsInserted(

40 const QModelIndex &, int, int)),

41 this, SLOT(refreshTrackViewHeader()));

42 …

43 }

Первое соединение необычно, поскольку вместо связывания виджета мы связываем модель выборки. Класс QItemSelectionModel используется для отслеживания выборок в представлениях. Связанный с моделью выборки представления таблицы, наш слот currentCdChanged() будет вызываться при всяком перемещении пользователя от одной записи к другой.

01 void MainForm::currentCdChanged(const QModelIndex &index)

02 {

03 if (index.isValid()) {

04 QSqlRecord record = cdModel->record(index.row());

05 int id = record.value("id").toInt();

06 trackModel->setFilter(QString("cdid = %1").arg(id));

07 } else {

08 trackModel->setFilter("cdid = -1");

09 }

10 trackModel->select();

11 refreshTrackViewHeader();

12 }

Этот слот вызывается при каждой смене текущего компакт-диска. Это происходит при переходе пользователя к другому компакт-диску (щелкая мышкой по соответствующей строке или используя клавиши Up и Down). Если компакт-диск недействителен (например, если вообще нет компакт-дисков или был вставлен новый компакт-диск, или текущий компакт-диск был только что удален), мы устанавливаем идентификатор cdid таблицы дорожек track в значение —1 (недействительный идентификатор, которому не соответствует никакая запись).

Затем, установив фильтр, мы выбираем ему соответствующие записи дорожек. Функция refreshTrackViewHeader() будет рассмотрена вскоре.

01 void MainForm::addCd()

02 {

03 int row = 0;

04 if (cdTableView->currentIndex().isValid())

05 row = cdTableView->currentIndex().row();

06 cdModel->insertRow(row);

07 cdModel->setData(cdModel->index(row, Cd_Year),

08 QDate::currentDate().year());

09 QModelIndex index = cdModel->index(row, Cd_Title);

10 cdTableView->setCurrentIndex(index);

11 cdTableView->edit(index);

12 }

Когда пользователь нажимает клавишу Add CD (добавить компакт-диск), в таблицу cdTableView вставляется новая пустая строка и мы переходим в режим редактирования. Мы также устанавливаем значение по умолчанию для поля year. В этот момент пользователь может редактировать запись, заполняя пустые поля и выбирая артиста из выпадающего списка, который автоматически выдается моделью QSqlRelationalTableModel благодаря вызову setRelation(), a также изменяя год, если не подходит значение по умолчанию. Если пользователь подтверждает вставку нажатием клавиши Enter, запись вставляется. Пользователь может отменить вставку, нажав клавишу Esc.

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

Интервал:

Закладка:

Сделать


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

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




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


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


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

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