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

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

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

ΠΠ°Ρ…ΠΎΠ΄ΡΡΡŒ Π² консольном Ρ€Π΅ΠΆΠΈΠΌΠ΅, Π²ΠΎΠΉΠ΄ΠΈΡ‚Π΅ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ hello ΠΈ Π·Π°Π΄Π°ΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

qmake -project

для создания Ρ„Π°ΠΉΠ»Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, нСзависимого ΠΎΡ‚ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ (hello.pro), ΠΈ Π·Π°Ρ‚Π΅ΠΌ Π·Π°Π΄Π°ΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

qmake hello.pro

для создания Π½Π° основС Ρ„Π°ΠΉΠ»Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° зависимого ΠΎΡ‚ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Ρ„Π°ΠΉΠ»Π° makefile.

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ make для построСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ [1]. Π—Π°Ρ‚Π΅ΠΌ выполняйтС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, задавая ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ hello Π² систСмС Windows ΠΈΠ»ΠΈ ./hello Π² систСмС Unix ΠΈ open hello.app Π² систСмС Mac OS X. Для Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ закрытия ΠΎΠΊΠ½Π°, Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡƒΡŽ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ ΠΎΠΊΠ½Π°. Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Windows ΠΈ установили Π²Π΅Ρ€ΡΠΈΡŽ Qt с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ вмСстС с компилятором MinGW, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ярлык для ΠΎΠΊΠ½Π° DOS, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ срСды ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ настроСны Π½Π° Qt. Π’Ρ‹Π·Π²Π°Π² это ΠΎΠΊΠ½ΠΎ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² Π½Π΅ΠΌ Qt—прилоТСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠΏΠΈΡΠ°Π½Π½Ρ‹Π΅Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ qmake ΠΈ make. Π€ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² ΠΏΠ°ΠΏΠΊΡƒ debug ΠΈΠ»ΠΈ release, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, C:\qt-book\hello\release\hello.exe.

Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Visual Π‘++ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Microsoft, Ρ‚ΠΎ Π²Π°ΠΌ потрСбуСтся Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ nmake, Π° Π½Π΅ make. Π—Π΄Π΅ΡΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΏΠΎ-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π² Visual Studio Π½Π° основС Ρ„Π°ΠΉΠ»Π° hello.pro, выполняя ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

qmake -tp vc hello.pro

ΠΈ Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ построСниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² систСмС Visual Studio. Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Xcode Π½Π° Mac OS X, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Xcode с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

qmake -spec macx-xcode

Рис. 1.2. ВСкстовая ΠΌΠ΅Ρ‚ΠΊΠ° с простым Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ HTML.

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠΌ сСбС нСбольшоС Ρ€Π°Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΠΌ строку

QLabel *label = new QLabel("Hello Qt!");

Π½Π° строку

QLabel *label = new QLabel("<h2><i>Hello</i> "

"<font color=red>Qt!</font></h2>");

ΠΈ снова Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ построСниС прилоТСния. Как ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€, совсСм Π½Π΅ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒ элСмСнты ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса Qt—прилоТСния с использованиСм Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… простых срСдств форматирования Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² HTML.

ВзаимодСйствиС с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ

Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ возмоТности взаимодСйствия ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ прСдставляСт собой ΠΊΠ½ΠΎΠΏΠΊΡƒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΆΠ°Ρ‚ΡŒ ΠΈ Ρ‚ΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ. Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΡ‡Π΅Π½ΡŒ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ исходный ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Hello, Π½ΠΎ здСсь вмСсто QLabel ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ QPushButton Π² качСствС Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° ΠΈ добавляСтся ΠΊΠΎΠ΄, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ Ρ€Π΅Π°ΠΊΡ†ΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° дСйствиС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ).

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ этого прилоТСния находится Π½Π° ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-дискС Π² Ρ„Π°ΠΉΠ»Π΅ /examples/chap01/quit/quit.cpp. НиТС приводится содСрТимоС этого Ρ„Π°ΠΉΠ»Π°:

01 #include <QAapplication>

02 #include <QPushButton.h>

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

04 {

05 QApplication app(argc, argv);

06 QPushButton *button = new QPushButton("Quit");

07 QObject::connect(button, SIGNAL(clicked()),

08 &app, SL0T(quit()));

09 button->show();

10 return app.exec();

11 }

Π’ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ Qt Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ сигналы[2] Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ дСйствия ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ состояния. НапримСр, QPushButton Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ сигнал clicked() ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΠΈ. Π‘ΠΈΠ³Π½Π°Π» ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ связан с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ (Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ слотом Π² Π΄Π°Π½Π½ΠΎΠΌ контСкстС) для автоматичСского Π΅Π΅ выполнСния ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ сигнала. Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ связываСм сигнал ΠΊΠ½ΠΎΠΏΠΊΠΈ clicked() со слотом quit() ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° прилоТСния QApplication. ΠœΠ°ΠΊΡ€ΠΎΡΡ‹ SIGNAL() ΠΈ SLOT() ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ синтаксиса; Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎΠ½ΠΈ ΠΎΠ±ΡŠΡΡΠ½ΡΡŽΡ‚ΡΡ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π³Π»Π°Π²Π΅.

Рис. 1.3. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Quit (Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ).

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ построим ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠœΡ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌΠΈ создан ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ quit ΠΈ Π² Π½Π΅ΠΌ находится Ρ„Π°ΠΉΠ» quit.cpp. Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ qmake ΠΈΠ· ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° quit для формирования Ρ„Π°ΠΉΠ»Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π·Π°Ρ‚Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» для создания Ρ„Π°ΠΉΠ»Π° makefile:

qmake -project

qmake quit.pro

Π’Π΅ΠΏΠ΅Ρ€ΡŒ постройтС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ запуститС Π΅Π³ΠΎ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. Если Π²Ρ‹ Π½Π°ΠΆΠΌΠ΅Ρ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ quit ΠΈΠ»ΠΈ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ ΠΏΡ€ΠΎΠ±Π΅Π»Π° Π½Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π΅ (ΠΎΠ½Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π½Π°ΠΆΠ°Ρ‚ΠΈΡŽ этой ΠΊΠ½ΠΎΠΏΠΊΠΈ), ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ.

Компоновка Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ²

Π’ Π΄Π°Π½Π½ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ создадим нСбольшоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ дСмонстрируСт ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠ² ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ для размСщСния Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² Π² ΠΎΠΊΠ½Π΅ ΠΈ использованиС сигналов ΠΈ слотов для синхронизации Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π΄Π²ΡƒΡ… Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ². ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ свой возраст, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π»ΠΈΠ±ΠΎ Π½Π°Π±ΠΎΡ€Π½ΠΎΠ³ΠΎ счСтчика (spin box), Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ»Π·ΡƒΠ½ΠΊΠ° (slider).

Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ состоит ΠΈΠ· Ρ‚Ρ€Π΅Ρ… Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ²: QSpinBox, QSlider ΠΈ QWidget. QWidget являСтся Π³Π»Π°Π²Π½Ρ‹ΠΌ ΠΎΠΊΠ½ΠΎΠΌ прилоТСния. Π’ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ QSpinBox ΠΈ QSlider ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΡŒ QWidget, ΠΈ ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌΠΈ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°ΠΌΠΈ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ QWidget. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ QWidget являСтся Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠΌ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ QSpinBox ΠΈ QSlider. Π‘Π°ΠΌ QWidget Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ родитСля, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² качСствС ΠΎΠΊΠ½Π° самого Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ QWidget ΠΈ всС Π΅Π³ΠΎ подклассы ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ QWidget *, Π·Π°Π΄Π°ΡŽΡ‰ΠΈΠΉ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚.

Рис. 1.4. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Age (возраст).

НиТС приводится исходный ΠΊΠΎΠ΄:

01 #include <QApplication>

02 #include <QHBoxLayout>

03 #include <QSlider>

04 #include <QSpinbox>

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

06 {

07 QApplication app(argc, argv);

08 QWidget *window = new QWidget;

09 window->setWindowTitle("Enter Your Age");

10 QSpinBox *spinBox = new QSpinBox;

11 QSlider *slider = new QSlider(Qt::Horizontal);

12 spinBox->setRange(0, 130);

13 slider->setRange(0, 130);

14 QObject::connect(spinBox, SIGNAL(valueChanged(int)),

15 slider, SLOT(setValue(int)));

16 QObject::connect(slider, SIGNAL(valueChanged(int)),

17 spinBox, SLOT(setValue(int)));

18 spinBox->setValue(35);

19 QHBoxLayout *layout = new QHBoxLayout;

20 layout->addWidget(spinBox);

21 layout->addWidget(slider);

22 window->setLayout(layout);

23 window->show();

24 return app.exec();

25 }

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ 8 ΠΈ 9 ΡΠΎΠ·Π΄Π°ΡŽΡ‚ ΠΈ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽΡ‚ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ QWidget, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся Π³Π»Π°Π²Π½Ρ‹ΠΌ ΠΎΠΊΠ½ΠΎΠΌ прилоТСния. Нами вызываСтся функция setWindowTitle() для Π²Ρ‹Π²ΠΎΠ΄Π° тСкстовой строки Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ ΠΎΠΊΠ½Π°.

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ 10 ΠΈ 11 ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ QSpinBox ΠΈ QSlider, Π° строки 12 ΠΈ 13 ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ допустимый Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ измСнСния ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. ΠœΡ‹ Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ возраст Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Ρ‚ΡŒ 130 Π»Π΅Ρ‚. ΠœΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ window Π² конструкторах QSpinBox ΠΈ QSlider, указывая Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ window Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΈΡ… Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠΌ, Π½ΠΎ здСсь это Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ систСма ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ это ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈ автоматичСски установит Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ для Π½Π°Π±ΠΎΡ€Π½ΠΎΠ³ΠΎ счСтчика ΠΈ ΠΏΠΎΠ»Π·ΡƒΠ½ΠΊΠ°, ΠΊΠ°ΠΊ ΠΌΡ‹ это ΡƒΠ²ΠΈΠ΄ΠΈΠΌ вскорС.

Π”Π²Π° Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ QObject::connect(), Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Π΅ Π² строках с 14 ΠΏΠΎ 17, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π°Π±ΠΎΡ€Π½ΠΎΠ³ΠΎ счСтчика ΠΈ ΠΏΠΎΠ»Π·ΡƒΠ½ΠΊΠ°, заставляя ΠΈΡ… всСгда ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Если ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² измСняСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‚ΠΎ гСнСрируСтся сигнал valueChanged(int) ΠΈ вызываСтся слот setValue(int) Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° с Π½ΠΎΠ²Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ возраста.

Π’ строкС 18 Π½Π°Π±ΠΎΡ€Π½Ρ‹ΠΉ счСтчик устанавливаСтся Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 35. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ QSpinBox Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ сигнал valueChanged(int) с цСлочислСнным Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ 35. Π­Ρ‚ΠΎΡ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ пСрСдаСтся слоту setValue(int) Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° QSlider, ΠΈ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΏΠΎΠ»Π·ΡƒΠ½ΠΎΠΊ устанавливаСтся Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 35. ΠŸΠΎΠ»Π·ΡƒΠ½ΠΎΠΊ Π·Π°Ρ‚Π΅ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ сигнал valueChanged(int), ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ измСнилось, ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ слот setValue(int) Π½Π°Π±ΠΎΡ€Π½ΠΎΠ³ΠΎ счСтчика. Но Π½Π° этот Ρ€Π°Π· функция setValue(int) Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сигнал, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π°Π±ΠΎΡ€Π½Ρ‹ΠΉ счСтчик ΡƒΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 35. Π­Ρ‚ΠΎ Π½Π΅ позволяСт ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒ эти дСйствия бСсконСчно. Описанная ситуация продСмонстрирована Π½Π° рис. 1.5.

Рис. 1.5. ИзмСнСниС значСния Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ измСнСнию значСния Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π΅.

Π’ строках с 19 ΠΏΠΎ 22 ΠΌΡ‹ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅ΠΌ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ Π½Π°Π±ΠΎΡ€Π½ΠΎΠ³ΠΎ счСтчика ΠΈ ΠΏΠΎΠ»Π·ΡƒΠ½ΠΊΠ°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ. ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ β€” это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ устанавливаСт Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π² Π·ΠΎΠ½Π΅ Π΅Π³ΠΎ дСйствия. Qt ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Ρ€ΠΈ основных класса ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠ² ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ:

β€’ QHBoxLayout Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ ΠΏΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ (ΠΈΠ»ΠΈ справа Π½Π°Π»Π΅Π²ΠΎ, Π² зависимости ΠΎΡ‚ ΠΊΡƒΠ»ΡŒΡ‚ΡƒΡ€Π½Ρ‹Ρ… Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΉ);