Чтение онлайн

на главную

Жанры

QT 4: программирование GUI на С++

Саммерфилд Марк

Шрифт:

24 void openRecentFile;

25 void updateStatusBar;

26 void spreadsheetModified;

27 private:

28 void createActions;

29 void createMenus;

30 void createContextMenu;

31 void createToolBars;

32 void createStatusBar;

33 void readSettings;

34 void writeSettings;

35 bool okToContinue;

36 bool loadFile(const QString &fileName);

37 bool saveFile(const QString &fileName);

38 void setCurrentFile(const QString &fileName);

39 void updateRecentFileActions;

40 QString strippedName(const QString &fullFileName);

Для

поддержки пользовательского интерфейса главному окну потребуется еще несколько закрытых слотов и закрытых функций.

41 Spreadsheet *spreadsheet;

42 FindDialog *findDialog;

43 QLabel *locationLabel;

44 QLabel *formulaLabel;

45 QStringList recentFiles;

46 QString curFile;

47 enum { MaxRecentFiles = 5 };

48 QAction *recentFileActions[MaxRecentFiles];

49 QAction *separatorAction;

50 QMenu *fileMenu;

51 QMenu *editMenu;

52 QToolBar *fileToolBar;

53 QToolBar *editToolBar;

54 QAction *newAction;

55 QAction *openAction;

56 QAction *aboutQtAction;

57 };

58 #endif

Кроме этих закрытых слотов и закрытых функций в подклассе MainWindow имеется также много закрытых переменных. По мере их использования мы будем объяснять их назначение.

Теперь мы кратко рассмотрим реализацию этого подкласса:

01 #include <QtGui>

02 #include "finddialog.h"

03 #include "gotocelldialog.h"

04 #include "mainwindow.h"

05 #include "sortdialog.h"

06 #include "spreadsheet.h"

Мы включаем заголовочный файл <QtGui>, который содержит определения всех классов Qt, используемых нашим подклассом. Мы также включаем некоторые пользовательские заголовочные файлы из главы 2 , а именно finddialog.h, gotocelldialog.h и sortdialog.h.

07 MainWindow::MainWindow

08 {

09 spreadsheet = new Spreadsheet;

10 setCentralWidget(spreadsheet);

11 createActions;

12 createMenus;

13 createContextMenu;

14 createToolBars;

15 createStatusBar;

16 readSettings;

17 findDialog = 0;

18 setWindowIcon(QIcon(":/images/icon.png"));

19 setCurrentFile("");

20 }

В конструкторе мы начинаем создание виджета Электронная таблица Spreadsheet

и определяем его в качестве центрального виджета главного окна. Центральный виджет занимает среднюю часть главного окна (см. рис. 3.2). Класс Spreadsheet является подклассом QTableWidget, который обладает некоторыми возможностями электронной таблицы: например, он поддерживает формулы электронной таблицы. Реализацию этого класса мы рассмотрим в главе 4 .

Рис. 3.2. Области главного окна QMainWindow.

Мы вызываем закрытые функции createActions, createMenus, createContextMenu, createToolBars и createStatusBar для построения остальной части главного окна. Мы также вызываем закрытую функцию readSettings для чтения настроек, сохраненных в приложении.

Мы инициализируем указатель findDialog в нулевое значение, а при первом вызове MainWindow::find мы создадим объект FindDialog. B конце конструктора в качестве пиктограммы окна мы задаем PNG—файл: icon.png. Qt поддерживает многие форматы графических файлов, включая BMP, GIF [4] , JPEG, PNG, PNM, XBM и XPM. Функция QWidget::setWindowIcon устанавливает пиктограмму в левый верхний угол окна. К сожалению, не существует независимого от платформы способа установки пиктограммы приложения, отображаемого на рабочем столе компьютера. Описание этой процедуры для различных платформ можно найти в сети Интернет по адресу http://doc.trolltech.com/4.1/appicon.html.

4

Если вы находитесь в стране, которая признает патенты на программное обеспечение и где компания Unisys обладает патентом на LZW—распаковку, вам, возможно, потребуется лицензия от компании Unisys на право применения ее технологии работы с файлами GIF. По этой причине поддержка файлов GIF по умолчанию отключена в Qt. Мы надеемся, что срок действия ограничений этой лицензии истечет к концу 2004 года. GIF support is disabled in Qt by default because the decompression algorithm used by GIF files was patented in some countries where software patents are recognized. We believe that this patent has now expired worldwide. To enable GIF support in Qt, pass the —qt—gif command—line option to the configure script or set the appropriate option in the Qt installer.

В приложениях с графическим пользовательским интерфейсом обычно используется много изображений. Существует много различных методов, предназначенных для работы приложения с изображениями. Наиболее распространенными являются:

• хранение изображений в файлах и загрузка их во время выполнения приложения;

• включение файлов XPM в исходный код программы; это возможно, поскольку файлы XPM являются совместимыми с файлами исходного кода С++);

• использование механизма определения ресурсов, предусмотренного в Qt.

Мы используем здесь механизм определения ресурсов, поскольку он более удобен, чем загрузка файлов во время выполнения приложения, и он работает со всеми поддерживаемыми форматами графических файлов. Мы храним изображения в подкаталоге images исходного дерева.

Для применения системы ресурсов Qt мы должны создать файл ресурсов и добавить в файл .pro строку, которая задает этот файл ресурсов. В нашем примере мы назвали файл ресурсов spreadsheet.qrc, поэтому в файл .pro мы добавляем следующую строку:

Поделиться:
Популярные книги

Эпоха Опустошителя. Том I

Павлов Вел
1. Вечное Ристалище
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Эпоха Опустошителя. Том I

Проблема майора Багирова

Майер Кристина
1. Спецназ
Любовные романы:
современные любовные романы
6.60
рейтинг книги
Проблема майора Багирова

Законы Рода. Том 13

Андрей Мельник
13. Граф Берестьев
Фантастика:
аниме
фэнтези
5.00
рейтинг книги
Законы Рода. Том 13

Газлайтер. Том 15

Володин Григорий Григорьевич
15. История Телепата
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Газлайтер. Том 15

О, Путник!

Арбеков Александр Анатольевич
1. Квинтет. Миры
Фантастика:
социально-философская фантастика
5.00
рейтинг книги
О, Путник!

Прометей: каменный век

Рави Ивар
1. Прометей
Фантастика:
альтернативная история
6.82
рейтинг книги
Прометей: каменный век

Её (мой) ребенок

Рам Янка
Любовные романы:
современные любовные романы
6.91
рейтинг книги
Её (мой) ребенок

Идеальный мир для Лекаря 8

Сапфир Олег
8. Лекарь
Фантастика:
юмористическое фэнтези
аниме
7.00
рейтинг книги
Идеальный мир для Лекаря 8

Прометей: каменный век II

Рави Ивар
2. Прометей
Фантастика:
альтернативная история
7.40
рейтинг книги
Прометей: каменный век II

Цвет сверхдержавы - красный. Трилогия

Симонов Сергей
Цвет сверхдержавы - красный
Фантастика:
попаданцы
альтернативная история
8.06
рейтинг книги
Цвет сверхдержавы - красный. Трилогия

Болтливый мертвец

Фрай Макс
7. Лабиринты Ехо
Фантастика:
фэнтези
9.41
рейтинг книги
Болтливый мертвец

На границе империй. Том 9. Часть 2

INDIGO
15. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 2

Истребители. Трилогия

Поселягин Владимир Геннадьевич
Фантастика:
альтернативная история
7.30
рейтинг книги
Истребители. Трилогия

Лишняя дочь

Nata Zzika
Любовные романы:
любовно-фантастические романы
8.22
рейтинг книги
Лишняя дочь