QT 4: программирование GUI на С++
Шрифт:
Давайте начнем с реализации виджета и сначала приведем заголовочный файл:
Заголовочный файл начинается с предварительных объявлений классов Cell и SpreadsheetCompare.
Рис. 4.1. Деревья наследования для классов Spreadsheet и Cell.
Такие атрибуты ячейки QTableWidget, как ее текст и выравнивание, хранятся в QTableWidgetltem. В отличие от QTableWidget, класс QTableWidgetltem не является виджетом; это обычный класс данных. Класс Cell наследует QTableWidgetltem, и мы рассмотрим этот класс в последнем разделе данной главы, где представим его реализацию.
Функция autoRecalculate реализуется как встроенная (inline), поскольку она лишь показывает, задействован или нет режим автоматического перерасчета.
В главе 3 мы опирались на использование некоторых открытых функций класса электронной таблицы Spreadsheet при реализации MainWindow Например, из MainWindow::newFile мы вызывали функцию clear для очистки электронной таблицы. Кроме того, мы вызывали некоторые функции, унаследованные от QTableWidget, а именно setCurrentCell и setShowGrid.
Класс Spreadsheet содержит много слотов, которые реализуют действия пунктов меню Edit, Tools и Options, и он содержит один сигал modified для уведомления о возникновении любого изменения.
Мы определяем один закрытый слот, который используется внутри класса Spreadsheet.
В закрытой секции этого класса мы объявляем три константы, четыре функции и одну переменную.
Заголовочный файл заканчивается определением класса SpreadsheetCompare. Мы объясним назначение этого класса при рассмотрении функции Spreadsheet::sort.
Теперь мы рассмотрим реализацию:
Обычно при вводе пользователем некоторого текста в пустую ячейку QTableWidget будет автоматически создавать элемент QTableWidgetltem для хранения этого текста. Вместо этого мы хотим, чтобы создавались элементы Cell. Это достигается с помощью вызова в конструкторе функции setItemPrototype. Всякий раз, когда требуется новый элемент, QTableWidget дублирует элемент, переданный в качестве прототипа.
Среда обитания (сборник)
Советский детектив
Детективы:
криминальные детективы
рейтинг книги
Локки 6. Потомок бога
6. Локки
Фантастика:
аниме
фэнтези
рейтинг книги
Черный Маг Императора 16
16. Черный маг императора
Фантастика:
юмористическое фэнтези
аниме
фэнтези
фантастика: прочее
попаданцы
рейтинг книги
Гранд империи
3. Страж
Фантастика:
фэнтези
попаданцы
альтернативная история
рейтинг книги
Офицер
1. Офицер
Фантастика:
боевая фантастика
рейтинг книги
Кодекс Крови. Книга ХI
11. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
рейтинг книги
Бандит
1. Петр Синельников
Фантастика:
фэнтези
рейтинг книги
Матабар III
3. Матабар
Фантастика:
фэнтези
рейтинг книги
Газлайтер. Том 19
19. История Телепата
Фантастика:
попаданцы
аниме
фэнтези
рейтинг книги
Сильнейший Столп Империи. Книга 3
3. Сильнейший Столп Империи
Фантастика:
аниме
фэнтези
попаданцы
рейтинг книги
Проходные дворы
Документальная литература:
прочая документальная литература
рейтинг книги