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

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

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

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΈ наш ΠΎΠ±Π·ΠΎΡ€ MainWindow, ΠΈ поэтому ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ класса Editor. Класс Editor прСдставляСт ΠΎΠ΄Π½ΠΎ Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π΅ ΠΎΠΊΠ½ΠΎ. Он наслСдуСт QTextEdit, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ обСспСчиваСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ тСкстового Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°. Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ любой Π²ΠΈΠ΄ΠΆΠ΅Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² качСствС Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ Π² качСствС Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ ΠΎΠΊΠ½Π° Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ пространствС интСрфСйса MDI.

НиТС приводится ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ класса:

01 class Editor : public QTextEdit

02 {

03 Q_OBJECT

04 public:

05 Editor(QWidget *parent = 0);

06 bool openFile(const QString &fileName);

07 bool save();

08 bool saveAs();

09 void newFile();

10 bool open();


11 protected:

12 QSize sizeHint() const;

13 QAction *windowMenuAction() const { return action; }

14 void closeEvent(QCloseEvent *event);

15 private slots:

16 void documentWasModified();


17 private:

18 bool okToContinue();

19 bool saveFile(const QString &fileName);

20 void setCurrentFile(const QString &fileName);

21 bool readFile(const QString &fileName);

22 bool writeFile(const QString &fileName);

23 QString strippedName(const QString &fullFileName);

24 QString curFile;

25 bool isUntitled;

26 QString fileFilters;

27 QAction *action;

28 }

ΠŸΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π² классС MainWindow прилоТСния ЭлСктронная Ρ‚Π°Π±Π»ΠΈΡ†Π° Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΆΠ΅ Π² классС Editor: okToContinue(), saveFile(), setCurrentFile() ΠΈ strippedName().

01 Editor::Editor(QWidget *parent)

02 : QTextEdit(parent)

03 {

04 action = new QAction(this);

05 action->setCheckable(true);

06 connect(action, SIGNAL(triggered()), this, SLOT(show()));

07 connect(action, SIGNAL(triggered()), this, SLOT(setFocus()));

08 isUntitled = true;

09 fileFilters = tr("Text files (*.txt)\nAll files (*)");

10 connect(document(), SIGNAL(contentsChanged()),

11 this, SLOT(documentWasModified()));

12 setWindowIcon(QPixmap(":/images/document.png"));

13 setAttribute(Qt::WA_DeleteOnClose);

14 }

Π‘Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ создаСм дСйствиС QAction, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅Π΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ Π² мСню прилоТСния Window, ΠΈ связываСм Π΅Π³ΠΎ со слотами show() ΠΈ setFocus().

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ любоС количСство ΠΎΠΊΠΎΠ½ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ систСму ΠΈΡ… наимСнования, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ ΠΎΡ‚Π»ΠΈΡ‡Π°Π»ΠΈΡΡŒ Π΄ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΈΡ… сохранСния. Один ΠΈΠ· распространСнных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ ΠΈΠΌΠ΅Π½ с числами (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, document1.txt). ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ isUntitled, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΡ‚ΡŒ прСдоставляСмыС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΈΠΌΠ΅Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ сгСнСрированныС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ.

ΠœΡ‹ связываСм сигнал тСкстового Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° contentsChanged() c Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ слотом documentWasModified(). Π­Ρ‚ΠΎΡ‚ слот просто Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ setWindowModified(true).

НаконСц, ΠΌΡ‹ устанавливаСм Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Qt::WA_DeleteOnClose для прСдотвращСния ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти ΠΏΡ€ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΎΠΊΠ½Π° Editor.

ПослС выпрлнСния конструктора ΠΌΡ‹ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ Π²Ρ‹Π·ΠΎΠ²Π° Π»ΠΈΠ±ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ newFile(), Π»ΠΈΠ±ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ open().

01 void Editor::newFile()

02 {

03 static int documentNumber = 1;

04 curFile = tr("document%1.txt").arg(documentNumber);

05 setWindowTitle(curFile + "[*]");

06 action->setText(curFile);

07 isUntitled = true;

08 ++documentNumber;

09 }

Ѐункция newFile() Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ для Π½ΠΎΠ²ΠΎΠ³ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° имя Ρ‚ΠΈΠΏΠ° document1.txt. Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ newFile(), a Π½Π΅ Π² конструктор, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ числа ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ open() для открытия ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π²ΠΎ вновь созданном Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ Editor. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ пСрСмСнная documentNumber объявлСна ΠΊΠ°ΠΊ статичСская, ΠΎΠ½Π° совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ всСми экзСмплярами Editor.

ΠœΠ°Ρ€ΠΊΠ΅Ρ€ Β«[*]Β» Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ ΠΎΠΊΠ½Π° ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ мСсто, Π³Π΄Π΅ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ Π·Π²Π΅Π·Π΄ΠΎΡ‡ΠΊΡƒ ΠΏΡ€ΠΈ нСсохранСнных измСнСниях Ρ„Π°ΠΉΠ»Π° для ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ, ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΡ‚ Mac OS X. ΠœΡ‹ рассматривали этот ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ Π² Π³Π»Π°Π²Π΅ 3.

01 bool Editor::open()

02 {

03 QString fileName = QFileDialog::getOpenFileName(

04 this, tr("Open"), fileFilters);

05 if(fileName.isEmpty())

06 return false;

07 return openFile(fileName);

08 }

Ѐункция open() пытаСтся ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ сущСcΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Π°ΠΉΠ» ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ openFile().

01 bool Editor::save()

02 {

03 if (isUntitled) {

04 return saveAs();

05 } else {

06 return saveFile(curFile);

07 }

Ѐункция save() ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ‘Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ isUntitled для опрСдСлСния Π²ΠΈΠ΄Π° Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ saveFile() ΠΈΠ»ΠΈ saveAs().

01 void Editor::closeEvent(QCloseEvent *event)

02 {

03 if (okToContinue()) {

04 event->accept();

05 } else {

06 event->ignore();

07 }

08 }

Ѐункция closeEvent() пСрСопрСдСляСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ нСсохранСнныС измСнСния. Вся Π»ΠΎΠ³ΠΈΠΊΠ° содСрТится Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ okToContinue(), которая Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ сообщСниС Β«Do you want to save your changes?Β» (Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ измСнСния?). Если функция okToContinue() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true, ΠΌΡ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΠΌ событиС закрытия; Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΌΡ‹ Β«ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅ΠΌΒ» Π΅Π³ΠΎ ΠΈ ΠΎΠΊΠ½ΠΎ оставляСм ΠΏΡ€Π΅ΠΆΠ½ΠΈΠΌ.

01 void Editor::setCurrentFile(const QString &fileName)

02 {

03 curFile = fileName;

04 isUntitled = false;

05 action->setText(strippedName(curFile));

06 document()->setModified(false);

07 setWindowTitle(strippedName(curFile) + "[*]");

08 setWindowModified(false);

09 }

Ѐункция setCurrentFile() вызываСтся ΠΈΠ· openFile() ΠΈ saveFile() для обновлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… curFile ΠΈ isUntitled, установки тСкста Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΎΠΊΠ½Π° ΠΈ ΠΏΡƒΠ½ΠΊΡ‚Π° мСню, Π° Ρ‚Π°ΠΊΠΆΠ΅ для установки значСния Ρ„Π»Π°ΠΆΠΊΠ° ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π½Π° false. Всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ измСняСт тСкст Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса QTextDocument Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ сигнал contentsChanged() ΠΈ устанавливаСт свой Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ Ρ„Π»Π°ΠΆΠΎΠΊ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true.

01 QSize Editor::sizeHint() const

02 {

03 return QSize(72 * fontMetrics().width('x'),

04 25 * fontMetrics().lineSpacing());

05 }

Ѐункция sizeHint() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€, рассчитанный Π½Π° основС ΡˆΠΈΡ€ΠΈΠ½Ρ‹ Π±ΡƒΠΊΠ²Ρ‹ Β«xΒ» ΠΈ высоты строки тСкста. QWorkspace ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π² качСствС Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΎΠΊΠ½Π°.

НиТС приводится Ρ„Π°ΠΉΠ» main.cpp MDI—прилоТСния Editor:

01 #include <QApplication>

02 #include "mainwindow.h"

03 int main(int argc, char *argv[])

04 {

05 QApplication app(argc, argv);

06 QStringList args = app.arguments();

07 MainWindow mainWin;

08 if (args.count() > 1) {

09 for (int i = 1; i < args.count(); ++i)

10 mainWin.openFile(args[i]);

11 } else {

12 mainWin.newFile();

13 }

14 mainWin.show();

15 return app.exec();

16 }

Еслй ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π·Π°Π΄Π°Π΅Ρ‚ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС ΠΊΠ°ΠΊΠΈΠ΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ„Π°ΠΉΠ»Ρ‹, ΠΌΡ‹ пытаСмся ΠΈΡ… Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΌΡ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρƒ с пустым Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ. Π’Π°ΠΊΠΈΠ΅ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹Π΅ для Qt ΠΎΠΏΡ†ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, ΠΊΠ°ΠΊ β€”style ΠΈ β€”font (ΡΡ‚ΠΈΠ»ΡŒ ΠΈ ΡˆΡ€ΠΈΡ„Ρ‚), автоматичСски ΡƒΠ±ΠΈΡ€Π°ΡŽΡ‚ΡΡ ΠΈΠ· списка Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² конструктором QApplication. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ссли ΠΌΡ‹ напишСм Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС

mdieditor -style motif readme.txt

QApplication::arguments() Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ QStringList с двумя элСмСнтами (Β«mdieditorΒ» ΠΈ Β«readme.txtΒ»), Π° МDIβ€”ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Editor запустится с Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ readme.txt.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ MDI прСдставляСт собой ΠΎΠ΄ΠΈΠ½ ΠΈΠ· способов Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ со ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ. Π’ систСмС MacOS Π₯ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»Π΅Π½ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, связанный с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΎΠΊΠΎΠ½ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня. Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ рассматриваСтся Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Β«Π Π°Π±ΠΎΡ‚Π° со ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈΒ» Π³Π»Π°Π²Ρ‹ Π—.

Π“Π»Π°Π²Π° 7. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° событий

Бобытия Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΎΠΊΠΎΠ½Π½ΠΎΠΉ систСмой ΠΈΠ»ΠΈ Qt Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ дСйствия. Когда ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ‚ ΠΈΠ»ΠΈ отпускаСт ΠΊΠ»Π°Π²ΠΈΡˆΡƒ ΠΈΠ»ΠΈ ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠΌΡ‹ΡˆΠΊΠΈ, гСнСрируСтся событиС клавиши ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈΠ»ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΌΡ‹ΡˆΠΊΠΈ; ΠΊΠΎΠ³Π΄Π° ΠΎΠΊΠ½ΠΎ Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ выводится Π½Π° экран, гСнСрируСтся событиС рисования, указывая ΠΏΠΎΡΠ²ΠΈΠ²ΡˆΠ΅ΠΌΡƒΡΡ ΠΎΠΊΠ½Ρƒ Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π΅Π³ΠΎ прорисовки. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ событий Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° дСйствия ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Π½ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ события, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, события Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ самой систСмой ΠΈ Π½Π΅ зависят ΠΎΡ‚ дСйствий ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

ΠŸΡ€ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π² Qt Π½Π°ΠΌ Ρ€Π΅Π΄ΠΊΠΎ приходится Π΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎ событиях, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ Qt сами Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ сигналы Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° любоС сущСствСнноС событиС. Бобытия становятся ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΈ создании Π½Π°ΠΌΠΈ своих сооствСнных Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ², ΠΈΠ»ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² Qt.