В двух предыдущих главах мы показали способы создания пользовательского интерфейса приложения Электронная таблица. В данной главе мы завершим программирование функций, обеспечивающих работу этого интерфейса. Кроме того, мы рассмотрим способы загрузки и сохранения файлов, хранения данных в памяти, реализации операций с буфером обмена (clipboard) и добавления поддержки формул электронной таблицы к классу
Центральный виджет
Центральную область
1. Стандартный виджет Qt
В качестве центрального могут использоваться стандартные виджеты, например
2. Пользовательский виджет
В специализированных приложениях часто требуется показывать данные в пользовательском виджете. Например, программа редактирования пиктограмм могла бы в качестве центрального использовать виджет
3. Базовый виджет QWidget с менеджером компоновки
Иногда в центральной области приложения размещается много виджетов. Это можно сделать путем применения
4. Разделитель
Другой способ размещения в центральной области нескольких виджетов заключается в применении разделителя
5. Рабочая область (workspace) интерфейса MDI
Если в приложении используется интерфейс MDI, центральную область будет занимать виджет
Менеджеры компоновки, разделители и рабочие области MDI могут использоваться совместно со стандартными виджетами Qt или с пользовательскими виджетами. В главе 6 подробно рассматриваются эти классы.
В приложении Электронная таблица в качестве центрального виджета применяется некоторый подкласс класса
Создание подкласса QTableWidget
Класс
Давайте начнем с реализации виджета и сначала приведем заголовочный файл:
01 #ifndef SPREADSHEET_H
02 #define SPREADSHEET_H
03 #include
04 class Cell;
05 class SpreadsheetCompare;
Заголовочный файл начинается с предварительных объявлений классов
Такие атрибуты ячейки
06 class Spreadsheet : public QTableWidget
07 {
08 Q_OBJECT
09 public:
10 Spreadsheet(QWidget *parent = 0);
11 bool autoRecalculate() const { return autoRecalc; }
12 QString currentLocation() const;
13 QString currentFormula() const;
14 QTableWidgetSelectionRange selectedRange() const;
15 void clear();