Жасмин Бланшет - QT 4: программирование GUI на С++
- Название:QT 4: программирование GUI на С++
- Автор:
- Жанр:
- Издательство:КУДИЦ-ПРЕСС
- Год:2007
- Город:Москва
- ISBN:978-5-91136-038-2
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Жасмин Бланшет - QT 4: программирование GUI на С++ краткое содержание
Единственное официальное руководстро по практическому программированию в среде 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 на С++ - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
01 void TeamLeadersDialog::del()
02 {
03 model->removeRows(listView->currentIndex().row(), 1);
04 }
В конструкторе сигнал clicked() кнопки Delete (удалить) связывается со слотом del(). Поскольку мы только что удалили текущую строку, мы можем вызвать removeRows() для текущей позиции индекса и для значения 1 счетчика строк. Как и при выполнении вставки, мы полагаемся на то, что модель должным образом обновит представление.
01 QStringList TeamLeadersDialog::leaders() const
02 {
03 return model->stringList();
04 }
Наконец, функция leaders() позволяет считывать отредактированные строки, когда диалоговое окно закрыто.
Создать TeamLeadersDialog можно было бы на основе универсального диалогового окна редактирования списка строк, просто параметризируя заголовок этого окна. Другое часто используемое пользователями универсальное диалоговое окно отображает список файлов или каталогов. В следующем примере применяется класс QDirModel, который моделирует файловую систему компьютера и позволяет показывать (или скрывать) различные атрибуты файлов. Эта модель может применять фильтр для ограничения типов элементов файловой системы при их выводе на экран и упорядочивать элементы различными способами.

Рис. 10.7. Приложение Просмотр каталога.
Мы начнем с создания и настройки модели и представления в конструкторе диалогового окна Просмотр каталога (Directory Viewer).
01 DirectoryViewer::DirectoryViewer(QWidget *parent)
02 : QDialog(parent)
03 {
04 model = new QDirModel;
05 model->setReadOnly(false);
06 model->setSorting(QDir::DirsFirst | QDir::IgnoreCase | QDir::Name);
07 treeView = new QTreeView;
08 treeView->setModel(model);
09 treeView->header()->setStretchLastSection(true);
10 treeView->header()->setSortIndicator(0, Qt::AscendingOrder);
11 treeView->header()->setSortIndicatorShown(true);
12 treeView->header()->setClickable(true);
13 QModelIndex index = model->index(QDir::currentPath());
14 treeView->expand(index);
15 treeView->scrollTo(index);
16 treeView->resizeColumnToContents(0);
17 …
18 }
После создания модели мы обеспечиваем возможность ее редактирования и устанавливаем различные начальные атрибуты упорядочивания. Затем мы создаем объект QTreeView для отображения на экране данных модели. Заголовок QTreeView может использоваться пользователем для управления сортировкой. Делая заголовок восприимчивым к щелчкам мышки, пользователь может сортирбвать данные по выбранному им в заголовке столбцу, причем повторные щелчки переключают направление сортировки, т.е сортировку по возрастанию на сортировку по убыванию и наоборот. После настройки заголовков представления данных в виде дерева мы получаем индекс модели текущего каталога и обеспечиваем просмотр содержимого этого каталога, раскрывая при необходимости его подкаталоги, используя expand(), и устанавливая изображение на его начало, используя scrollTo(). Затем мы обеспечиваем ширину первого столбца, достаточную для размещения всех элементов без вывода многоточия (…).
Во фрагменте конструктора, который здесь не показан, мы связываем кнопки Create Directory (создать каталог) и Remove (удалить) со слотами, выполняющими соответствующие действия. Нам не нужно иметь кнопку Rename (переименовать), поскольку пользователи могут переименовывать элементы каталога по месту, нажимая клавишу F2 и осуществляя ввод символов с клавиатуры.
01 voidDirectoryViewer::createDirectory()
02 {
03 QModelIndex index;
04 if (!index.isValid())
05 return;
06 QString dirName = QInputDialog::getText(this,
07 tr("Create Directory"), tr("Directory name"));
08 if (!dirName.isEmpty()) {
09 if (!model->mkdir(index,dirName).isValid())
10 QMessageBox::information(this,
11 tr("Create Directory"),
12 tr("Failed to create the directory"));
13 }
14 }
Если пользователь вводит имя каталога в диалоговом окне ввода, мы пытаемся создать в текущем каталоге подкаталог с этим именем. Функция QDirModel::mkdir() принимает индекс родительского каталога и имя нового каталога; она возвращает индекс модели созданного каталога. Если операция завершается неудачей, возвращается недействительный индекс модели.
Последний пример в этом разделе показывает, как следует применять модель QSortFilterProxyModel. В отличие от других заранее определенных моделей, эта модель использует какую-нибудь существующую модель и управляет данными, которые проходят между базовой моделью и представлением. В нашем примере базовой является модель QStringListModel, которая проинициализирована списком названий цветов, распознаваемых Qt (полученных функцией QColor::colorNames() ). Пользователь может ввести строку фильтра в строке редактирования QLineEdit и указать ее тип (регулярное выражение, шаблон или фиксированная строка), используя поле с выпадающим списком.

Рис. 10.8. Приложение Названия цветов (ColorNames).
Ниже приводится фрагмент конструктора ColorNamesDialog:
01 ColorNamesDialog::ColorNamesDialog(QWidget *parent)
02 : QDialog(parent)
03 {
04 sourceModel = new QStringListModel(this);
05 sourceModel->setStringList(QColor::colorNames());
06 proxyModel = new QSortFilterProxyModel(this);
07 proxyModel->setSourceModel(sourceModel);
08 proxyModel->setFilterKeyColumn(0);
09 listView = new QListView;
10 listView->setModel(proxyModel);
11 syntaxComboBox = new QComboBox;
12 syntaxComboBox->addItem(tr("Regular expression"), QRegExp::RegExp);
13 syntaxComboBox->addItem(tr("Wildcard"), QRegExp::Wildcard);
14 syntaxComboBox->addItem(tr("Fixed string"), QRegExp::FixedString);
15 …
16 }
Модель QStringListModel создается и пополняется обычным образом. После этого создается модель QSortFilterProxyModel. Мы передаем базовую модель, используя функцию setSourceModel(), и указываем прокси на необходимость фильтрации по столбцу 0 базовой модеди. Функция QComboBox::addItem() принимает необязательный аргумент дополнительных данных типа QVariant; мы используем его для хранения значения QRegExp::PatternSyntax c текстом, определяющим тип фильтра данного элемента.
01 void ColorNamesDialog::reapplyFilter()
02 {
03 QRegExp::PatternSyntax syntax =
04 QRegExp::PatternSyntax(syntaxComboBox->itemData(
05 syntaxComboBox->currentIndex()).toInt());
06 QRegExp regExp(filterLineEdit->text(), Qt::CaseInsensitive, syntax);
07 proxyModel->setFilterRegExp(regExp);
08 }
Слот reapplyFilter() вызывается при всяком изменении пользователем строки фильтра или типа шаблона фильтрации в поле с выпадающим списком. Мы создаем объект QRegExp, используя текст в строке редактирования. Затем устанавливаем тип шаблона фильтрации на тот, который имеется в данных текущего элемента и отображается в соответствующем поле с выпадающим списком. Когда мы вызываем setFilterRegExp(), новый фильтр становится активным и автоматически обновляется представление данных.
Читать дальшеИнтервал:
Закладка: