Жасмин Бланшет - 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 на С++ - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
48 bool ascending[KeyCount];
49 };
50 #endif
Заголовочный файл заканчивается определением класса SpreadsheetCompare. Мы объясним назначение этого класса при рассмотрении функции Spreadsheet::sort().
Теперь мы рассмотрим реализацию:
01 #include
02 #include "cell.h"
03 #include "spreadsheet.h"
04 Spreadsheet::Spreadsheet(QWidget *parent)
05 : QTableWidget(parent)
06 {
07 autoRecalc = true;
08 setItemPrototype(new Cell);
09 setSelectionMode(ContiguousSelection);
10 connect(this, SIGNAL(itemChanged(QTableWidgetItem *)),
11 this, SLOT(somethingChanged()));
12 clear();
13 }
Обычно при вводе пользователем некоторого текста в пустую ячейку QTableWidget будет автоматически создавать элемент QTableWidgetltem для хранения этого текста. Вместо этого мы хотим, чтобы создавались элементы Cell. Это достигается с помощью вызова в конструкторе функции setItemPrototype(). Всякий раз, когда требуется новый элемент, QTableWidget дублирует элемент, переданный в качестве прототипа.
Кроме того, в конструкторе мы устанавливаем режим выделения области на значение QAbstractItemView::ContiguousSelection, чтобы могла быть выделена только одна прямоугольная область. Мы соединяем сигнал itemChanged() виджета таблицы с закрытым слотом somethingChanged(); это гарантирует вызов слота somethingChanged() при редактировании ячейки пользователем. Наконец, мы вызываем clear() для изменения размеров таблицы и задания заголовков столбцов.
14 void Spreadsheet::clear()
15 {
16 setRowCount(0);
17 setColumnCount(0);
18 setRowCount(RowCount);
19 setColumnCount(ColumnCount);
20 for (int i = 0; i < ColumnCount; ++i) {
21 QTableWidgetltem *item = new QTableWidgetltem;
22 item->setText(QString(QChar('A' + i)));
23 setHorizontalHeaderItem(i, item);
24 }
25 setCurrentCell(0, 0);
26 }
Функция clear() вызывается из конструктора Spreadsheet для инициализации электронной таблицы. Она также вызывается из MainWindow::newFile().
Мы могли бы использовать QTableWidget::clear() для очистки всех элементов и любых выделений, но в этом случае заголовки имели бы текущий размер. Вместо этого мы уменьшаем размер электронной таблицы до 0 × 0. Это приводит к очистке всей электронной таблицы, включая заголовки. Затем мы опять устанавливаем ее размер на ColumnCount × RowCount (26 × 999) и заполняем строку горизонтального заголовка элементами QTableWidgetltem, содержащими обозначения столбцов. Нам не надо задавать метки строк, потому что по умолчанию строки обозначаются как «1», «2», … «26». В конце мы перемещаем курсор на ячейку A1.

Рис. 4.2. Виджеты, составляющие QTableWidget.
QTableWidget содержит несколько дочерних виджетов. Сверху располагается горизонтальный заголовок QHeaderView, слева — вертикальный заголовок QHeaderView и две полосы прокрутки QScrollBar. В центральной области размещается специальный виджет, называемый областью отображения (viewport), в котором QTableWidget вычерчивает ячейки. Доступ к различным дочерним виджетам осуществляется с помощью функций, унаследованных от QTableView и QAbstractScrollArea (рис. 4.2). QAbstractScrollArea содержит перемещаемую область отображения и две полосы прокрутки, которые могут включаться и отключаться. Подкласс QScrollArea рассматривается в главе 6.
Хранение данных в объектах типа «элемент»
В приложении Электронная таблица каждая непустая ячейка хранится в памяти в виде одного объекта QTableWidgetltem (элемент табличного виджета). Хранение данных в объектах типа «элемент» используется также виджетами QListWidget и QTreeWidget, которые работают с объектами QListWidgetItem и QTreeWidgetItem.
В Qt классы элементов могут использоваться вне таблиц как самостоятельные структуры данных. Например, QTableWidgetltem уже содержит некоторые атрибуты, в том числе строку, шрифт, цвет и пиктограмму, а также обратный указатель на QTableWidget. Такие элементы могут содержать также данные типа QVariant, включая зарегистрированные пользовательские типы, и, создавая подкласс такого элемента, можно обеспечить дополнительную функциональность.
Другие инструментальные средства предусматривают наличие в классах элементов указателя типа void для хранения пользовательских данных. В Qt используется более естественный подход с применением setData() для типа QVariant, однако если требуется иметь указатель void, это можно сделать просто путем создания подкласса для класса элемента, который будет содержать переменную—указатель на член типа void.
Для данных, к которым предъявляются повышенные требования, например для больших наборов данных, для сложных элементов данных, для интеграции баз данных и для множественных представлений данных, Qt предоставляет набор классов «модель/представление», в которых данные отделены от их визуального представления. Эти классы рассматриваются в главе 10.
01 Cell *Spreadsheet::cell(int row, int column) const
02 {
03 return static_cast(item(row, column));
04 }
Закрытая функция cell() возвращает для заданной строки и столбца объект Cell. Она работает почти так же, как QTableWidget::item(), но возвращает указатель на Cell, а не указатель на QTableWidgetltem.
01 QString Spreadsheet::text(int row, int column) const
02 {
03 Cell *c = cell(row, column);
04 if (с) {
05 return c->text();
06 } else {
07 return "";
08 }
09 }
Закрытая функция text() возвращает формулу заданной ячейки. Если cell() возвращает нулевой указатель, то это означает, что ячейка пустая, и поэтому мы возвращаем пустую строку.
01 QString Spreadsheet::formula(int row, int column) const
02 {
03 Cell *c = cell(row, column);
04 if (с) {
05 return c->formula();
06 } else {
07 return "";
08 }
09 }
Функция formula() возвращает формулу ячейки. Во многих случаях формула и текст совпадают; например формула «Hello» соответствует строке «Hello», поэтому при вводе пользователем в ячейку строки «Hello» и нажатии клавиши Enter в ячейке отобразится текст «Hello». Но имеется несколько исключений:
• Если формула представлена числом, именно оно и будет отображаться. Например, формула «1.50» обозначает значение 1.5 типа double, которое отображается в электронной таблице как выровненное вправо значение «1.5».
• Если формула начинается с одиночной кавычки, остальная часть формулы интерпретируется как текст. Например, результатом формулы «'12345» будет строка «12345».
• Если формула начинается со знака равенства («=»), то ее значение интерпретируется как арифметическое выражение. Например, если ячейка A1 содержит «12» и ячейка A2 содержит «6», то результатом формулы «=A1+A2» будет 18. Задача преобразования формулы в значение выполняется классом Cell. Здесь следует иметь в виду, что отображаемый в ячейке текст соответствует значению, полученному в результате расчета формулы, а не является текстом самой формулы.
Читать дальшеИнтервал:
Закладка: