QT 4: программирование GUI на С++ | страница 66
5. Рабочая область (workspace) интерфейса MDI
Если в приложении используется интерфейс MDI, центральную область будет занимать виджет QWorkspace, а каждое окно интерфейса MDI будет являться дочерним виджетом.
Менеджеры компоновки, разделители и рабочие области MDI могут использоваться совместно со стандартными виджетами Qt или с пользовательскими виджетами. В главе 6 подробно рассматриваются эти классы.
В приложении Электронная таблица в качестве центрального виджета применяется некоторый подкласс класса QTableWidget. Класс QTableWidget уже обеспечивает большинство необходимых нам функций электронной таблицы, но он не может понимать формулы электронной таблицы вида «=Al+A2+A3» и не поддерживает операции с буфером обмена. Мы реализуем эти недостающие функции в классе Spreadsheet, который наследует QTableWidget.
Создание подкласса QTableWidget
Класс Spreadsheet наследует QTableWidget. Виджет QTableWidget фактически является сеткой, представляющей собой двумерный разряженный массив. На нем отображается часть ячеек всей сетки, полученная при прокрутке изображения пользователем. При вводе пользователем текста в пустую ячейку QTableWidget автоматически создает элемент QTableWidgetItem для хранения текста.
Давайте начнем с реализации виджета и сначала приведем заголовочный файл:
>01 #ifndef SPREADSHEET_H
>02 #define SPREADSHEET_H
>03 #include
>04 class Cell;
>05 class SpreadsheetCompare;
Заголовочный файл начинается с предварительных объявлений классов Cell и SpreadsheetCompare.
Рис. 4.1. Деревья наследования для классов Spreadsheet и Cell.
Такие атрибуты ячейки QTableWidget, как ее текст и выравнивание, хранятся в QTableWidgetltem. В отличие от QTableWidget, класс QTableWidgetltem не является виджетом; это обычный класс данных. Класс Cell наследует QTableWidgetltem, и мы рассмотрим этот класс в последнем разделе данной главы, где представим его реализацию.
>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;