Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«QT 4: ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ GUI Π½Π° Π‘++Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 13

Автор Жасмин Π‘Π»Π°Π½ΡˆΠ΅Ρ‚

20 void find();

21 void goToCell();

22 void sort();

23 void about();

НСкоторыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ мСню, ΠΊΠ°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, File | New (Π€Π°ΠΉΠ» | Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ) ΠΈΠ»ΠΈ Help | About (ΠŸΠΎΠΌΠΎΡ‰ΡŒ | О ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅), Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π² MainWindow Π² Π²ΠΈΠ΄Π΅ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… слотов. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ слотов Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° void, ΠΎΠ΄Π½Π°ΠΊΠΎ save() ΠΈ saveAs() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° bool. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ игнорируСтся ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ слота Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° сигнал, Π½ΠΎ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ слота Π² качСствС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ, ΠΊΠ°ΠΊ это ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ любой ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π‘++.

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.

Π’ прилоТСниях с графичСским ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ интСрфСйсом ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. БущСствуСт ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… для Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния с изобраТСниями. НаиболСС распространСнными ΡΠ²Π»ΡΡŽΡ‚ΡΡ:

β€’ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² Ρ„Π°ΠΉΠ»Π°Ρ… ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈΡ… Π²ΠΎ врСмя выполнСния прилоТСния;

β€’ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ² XPM Π² исходный ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹; это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ„Π°ΠΉΠ»Ρ‹ XPM ΡΠ²Π»ΡΡŽΡ‚ΡΡ совмСстимыми с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ исходного ΠΊΠΎΠ΄Π° Π‘++);

β€’ использованиС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° опрСдСлСния рСсурсов, прСдусмотрСнного Π² Qt.

ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ здСсь ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ опрСдСлСния рСсурсов, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π΅Π½, Ρ‡Π΅ΠΌ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ² Π²ΠΎ врСмя выполнСния прилоТСния, ΠΈ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ со всСми ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹ΠΌΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°ΠΌΠΈ графичСских Ρ„Π°ΠΉΠ»ΠΎΠ². ΠœΡ‹ Ρ…Ρ€Π°Π½ΠΈΠΌ изобраТСния Π² ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ images исходного Π΄Π΅Ρ€Π΅Π²Π°.

Для примСнСния систСмы рСсурсов Qt ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» рСсурсов ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² Ρ„Π°ΠΉΠ» .pro строку, которая Π·Π°Π΄Π°Π΅Ρ‚ этот Ρ„Π°ΠΉΠ» рСсурсов. Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ Π½Π°Π·Π²Π°Π»ΠΈ Ρ„Π°ΠΉΠ» рСсурсов spreadsheet.qrc, поэтому Π² Ρ„Π°ΠΉΠ» .pro ΠΌΡ‹ добавляСм ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ строку:

RESOURCES = spreadsheet.qrc

Π‘Π°ΠΌ Ρ„Π°ΠΉΠ» рСсурсов ΠΈΠΌΠ΅Π΅Ρ‚ простой XMLβ€”Ρ„ΠΎΡ€ΠΌΠ°Ρ‚. НиТС ΠΏΠΎΠΊΠ°Π·Π°Π½ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΈΠ· ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π½Π°ΠΌΠΈ Ρ„Π°ΠΉΠ»Π° рСсурсов:

<!DOCTYPE RCC><RCC version="1.0">

<qresource>

<file>images/icon.png</file>

…

<file>images/gotocell.png</file>

</qresource>

</RCC>

Π€Π°ΠΉΠ»Ρ‹ рСсурсов послС компиляции входят Π² состав исполняСмого модуля прилоТСния, поэтому ΠΎΠ½ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Ρ‚Π΅Ρ€ΡΡ‚ΡŒΡΡ. ΠŸΡ€ΠΈ ссылкС Π½Π° рСсурсы ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΏΡ€Π΅Ρ„ΠΈΠΊΡ ΠΏΡƒΡ‚ΠΈ :/ (Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅ ΠΈ слСш), ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ поэтому ΠΏΠΈΠΊΡ‚ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° задаСтся ΠΊΠ°ΠΊ :/images/icon.png. РСсурсами ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ (Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ изобраТСния), ΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв, ΠΊΠΎΠ³Π΄Π° Π² Qt оТидаСтся ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π°. Они Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² Π³Π». 12.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ мСню ΠΈ ΠΏΠ°Π½Π΅Π»Π΅ΠΉ инструмСнтов

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ соврСмСнных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с графичСским ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ интСрфСйсом содСрТат мСню, контСкстноС мСню ΠΈ ΠΏΠ°Π½Π΅Π»ΠΈ инструмСнтов. МСню ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ возмоТности прилоТСния ΠΈ ΡƒΠ·Π½Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ способы Ρ€Π°Π±ΠΎΡ‚Ρ‹, Π° контСкстныС мСню ΠΈ ΠΏΠ°Π½Π΅Π»ΠΈ инструмСнтов ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ быстрый доступ ΠΊ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌ функциям.

Рис. 3.3. МСню прилоТСния ЭлСктронная Ρ‚Π°Π±Π»ΠΈΡ†Π°.

ИспользованиС понятия «дСйствия» ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ мСню ΠΈ ΠΏΠ°Π½Π΅Π»Π΅ΠΉ инструмСнтов ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ срСдств Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Qt. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ action (дСйствиС) ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΊ Π»ΡŽΠ±ΠΎΠΌΡƒ количСству мСню ΠΈ ΠΏΠ°Π½Π΅Π»Π΅ΠΉ инструмСнтов. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π² Qt мСню ΠΈ ΠΏΠ°Π½Π΅Π»Π΅ΠΉ инструмСнтов разбиваСтся Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ этапы:

β€’ созданиС ΠΈ настройка дСйствий;

β€’ созданиС мСню ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊ Π½ΠΈΠΌ дСйствий;

β€’ созданиС ΠΏΠ°Π½Π΅Π»Π΅ΠΉ инструмСнтов ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊ Π½ΠΈΠΌ дСйствий.

Π’ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ЭлСктронная Ρ‚Π°Π±Π»ΠΈΡ†Π° дСйствия ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π² createActions():

01 void MainWindow::createActions()

02 {

03 newAction = new QAction(tr("&New"), this);

04 newAction->setIcon(QIcon(":/images/new.png"));

05 newAction->setShortcut(tr("Ctrl+N"));

06 newAction->setStatusTip(tr("Create a new spreadsheet file"));

07 connect(newAction, SIGNAL(triggered()),

08 this, SLOT(newFile()));

ДСйствиС New (ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ) ΠΈΠΌΠ΅Π΅Ρ‚ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ быстрого Π²Ρ‹Π±ΠΎΡ€Π° ΠΏΡƒΠ½ΠΊΡ‚Π° мСню (New)[5], Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ΅ ΠΎΠΊΠ½ΠΎ (Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ), ΠΏΠΈΠΊΡ‚ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ (new.png), ΠΊΠ»Π°Π²ΠΈΡˆΡƒ быстрого Π²Ρ‹Π·ΠΎΠ²Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ (Ctrl+N) ΠΈ сообщСниС Π² строкС состояния. ΠœΡ‹ подсоСдиняСм ΠΊ сигналу этого дСйствия triggered() Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ слот Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° newFile(); этот слот ΠΌΡ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅. Π­Ρ‚ΠΎ соСдинСниС Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΏΡƒΠ½ΠΊΡ‚Π° мСню File | New (Ρ„Π°ΠΉΠ» | ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ), ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ ΠΈΠΌ ΠΊΠ½ΠΎΠΏΠΊΠΈ New Π½Π° ΠΏΠ°Π½Π΅Π»ΠΈ инструмСнтов ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ клавиш Ctrl+N Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ слот newFile().

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ дСйствий Open (ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ), Save (ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ) ΠΈ Save As (ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ) ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° созданиС дСйствия New, поэтому ΠΌΡ‹ сразу ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ строкС Β«recently opened filesΒ» (Π½Π΅Π΄Π°Π²Π½ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹) мСню File:

09 for (int i = 0; i < MaxRecentFiles; ++i)

10 {

11 recentFileActions[i] = new QAction(this);

12 recentFileActions[i]->setVisible(false);

13 connect(recentFileActions[i], SIGNAL(triggered()),

14 this, SLOT(openRecentFile()));