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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠžΡΠ½ΠΎΠ²Ρ‹ программирования Π² LinuxΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 187

Автор НСйл ΠœΡΡ‚ΡŒΡŽ

$ moc ButtonWindow.h -ΠΎ ButtonWindow.moc

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, скомпоновав с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ moc.

$ g++ -ΠΎ button ButtonWindow.срр -I$QTDIR/include -L$QTDIR/lib -lqui

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π½Π° рис. 17.3.

Рис. 17.3 


Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ Π²Π²Π΅Π»ΠΈ Π½ΠΎΠ²Ρ‹ΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, поэтому Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΈΡ… рассмотрим. QPushButton β€” Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ простой ΠΊΠ½ΠΎΠΏΠΊΠΈ, хранящий ΠΌΠ΅Ρ‚ΠΊΡƒ ΠΈ Ρ€Π°ΡΡ‚Ρ€ΠΎΠ²ΡƒΡŽ Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ ΠΈ способный Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ Ρ‰Π΅Π»Ρ‡ΠΊΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ клавиш.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° QPushButton ΠΎΡ‡Π΅Π½ΡŒ прост.

QPushButton::QPushButton(const QString &text, QWidget *parent,

 const char* name=0);

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ β€” тСкст ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ, Π΄Π°Π»Π΅Π΅ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ ΠΈ послСдний Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ β€” имя ΠΊΠ½ΠΎΠΏΠΊΠΈ, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ примСняСмоС Qt для Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°, ΠΎΠ±Ρ‰ΠΈΠΉ для всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², β€” QWidget, ΠΎΠ½ управляСт ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ свойствами. ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° NULL Π² качСствС Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня, ΠΏΡ€ΠΈ этом создаСтся содСрТащСС Π΅Π³ΠΎ пустоС ΠΎΠΊΠ½ΠΎ. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚Π΅ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ButtonWindow с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова this, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ вставкС ΠΊΠ½ΠΎΠΏΠΊΠΈ Π² ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΎΠΊΠ½Π° ButtonWindow.

АргумСнт name Π·Π°Π΄Π°Π΅Ρ‚ имя Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° для Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ использования Qt. Если ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ Qt ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ, имя Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΎ Π² сообщСнии ΠΎΠ± ошибкС, поэтому Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ подходящиС ΠΈΠΌΠ΅Π½Π° Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ², ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΡ€ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅ это сбСрСТСт массу Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Π’Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ QPushButton ΠΎΡ‡Π΅Π½ΡŒ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½ΠΎ вставляСтся Π² ΠΎΠΊΠ½ΠΎ ButtonWindow, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° parent конструктора QPushButton, Π±Π΅Π· указания полоТСния ΠΊΠ½ΠΎΠΏΠΊΠΈ, Π΅Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, Ρ€Π°ΠΌΠΊΠΈ ΠΈΠ»ΠΈ Ρ‡Π΅Π³ΠΎ-Π»ΠΈΠ±ΠΎ Π΅Ρ‰Π΅. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ внСшним Π²ΠΈΠ΄ΠΎΠΌ ΠΊΠ½ΠΎΠΏΠΊΠΈ, Ρ‡Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ для создания ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ интСрфСйса, слСдуСт ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π° Qt. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΈΡ… сСйчас рассмотрим,

Π’ Qt Π΅ΡΡ‚ΡŒ Ρ†Π΅Π»Ρ‹ΠΉ ряд способов размСщСния ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ². Π’Ρ‹ ΡƒΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ использованиС Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹Ρ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ‹Π·ΠΎΠ²Π° setGeometry, Π½ΠΎ ΠΎΠ½ΠΈ Ρ€Π΅Π΄ΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ Π½Π΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΈ Π½Π΅ ΠΌΠ΅Π½ΡΡŽΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹ ΠΎΠΊΠ½Π°.

ΠŸΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² β€” ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ классов QLayout ΠΈΠ»ΠΈ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ²-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ свои Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ послС задания ΠΈΠΌ подсказок, ΠΊΠ°ΡΠ°ΡŽΡ‰ΠΈΡ…ΡΡ отступов ΠΈ расстояний ΠΌΠ΅ΠΆΠ΄Ρƒ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°ΠΌΠΈ.

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ классами QLayout ΠΈ ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΌΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ класса QLayout Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°ΠΌΠΈ.

ΠšΠ»Π°ΡΡΡ‹ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ β€” ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Ρ‚ΠΈΠΏΠ° QObject, Π° Π½Π΅ QWidget, поэтому ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ. НапримСр, Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ QVBoxLayout β€” основной Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° QMainWindow.

Π’ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² (Ρ‚Π°ΠΊΠΈΠ΅, ΠΊΠ°ΠΊ QHBox ΠΈ QVBox) Π½Π°ΠΏΡ€ΠΎΡ‚ΠΈΠ² β€” ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚ΠΈΠΏΠ° QWidget ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΡ… ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, вас удивляСт, Ρ‡Ρ‚ΠΎ Π² Qt Π΅ΡΡ‚ΡŒ ΠΈ классы QLayout, ΠΈ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ QBox с Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌΠΈΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ возмоТностями. На самом Π΄Π΅Π»Π΅ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ QBox ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для удобства ΠΈ ΠΏΠΎ сущСству слуТат ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΎΠΉ классов QLayout Π² Ρ‚ΠΈΠΏΠ΅ QWidget. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ QLayout ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ автоматичСского измСнСния Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ², Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° QWidget::resizeEvent().

ΠŸΠΎΠ΄ΠΊΠ»Π°ΡΡΡ‹ QLayout: QVBoxLayout ΠΈ QHBoxLayout, β€” самый распространСнный способ создания интСрфСйса, ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΈΡ… Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Ρ‡Π°Ρ‰Π΅ всСго Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Qt.

QVBoxLayout ΠΈ QHBoxLayout β€” Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, хранящиС Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ ΠΈ схСмы размСщСния с Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΈ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ ориСнтациями соотвСтствСнно. Π’Ρ‹ смоТСтС ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ сколь ΡƒΠ³ΠΎΠ΄Π½ΠΎ слоТныС ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ², ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ допускаСтся использованиС Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π° счСт вставки ΠΊΠ°ΠΊ элСмСнта Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ схСмы размСщСния Π²Π½ΡƒΡ‚Ρ€ΡŒ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°.

Π•ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ конструктора QVBoxLayout, Π·Π°ΡΠ»ΡƒΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… внимания (Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² QHBoxLayout ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ΠΉ API).

QVBoxLayout::QVBoxLayout(QWidget *parent, int margin, int spacing,

 const char *name)

QVBoxLayout::QVBoxLayout(QLayout *parentLayout, int spacing,

 const char * name)

QVBoxLayout::QVBoxLayout(int spacing, const char *name)

Π ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° QLayout ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚, Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° QLayout. Если Π½Π΅ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π²Ρ‹ смоТСтС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅ Π΄Π°Π½Π½ΡƒΡŽ схСму размСщСния Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ QLayout с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° addLayout.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ margin ΠΈ spacing Π·Π°Π΄Π°ΡŽΡ‚ пустоС пространство Π² пиксСлах Π²ΠΎΠΊΡ€ΡƒΠ³ схСмы размСщСния QLayout ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°ΠΌΠΈ Π² Π½Π΅ΠΉ.

ПослС создания вашСй схСмы размСщСния QLayout Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ ΠΈΠ»ΠΈ схСмы с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠ°Ρ€Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²:

QBoxLayout::addWidget(QWidget *widget, int stretch = 0, int alignment = 0);

QBoxLayout::addLayout(QLayout *layout, int stretch = 0);

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 17.3.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 17.3. ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ классов QBoxLayout

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Π² дСйствии классы QBoxLayout ΠΏΡ€ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² QLabel Π² ΠΎΠΊΠ½Π΅ QMainWindow.

1. Π‘Π½Π°Ρ‡Π°Π»Π° Π²Π²Π΅Π΄ΠΈΡ‚Π΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» LayoutWindow.h:

#include <qmainwindow.h>


class LayoutWindow : public QMainWindow {

 QOBJECT

public:

 LayoutWindow(QWidget *parent = 0, const char *name = 0);

virtual ~LayoutWindow();

};

2. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Π²Π΅Π΄ΠΈΡ‚Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π² Ρ„Π°ΠΉΠ» LayoutWindow.cpp:

#include <qapplication.h>

#include <qlabel.h>

#include <qlayout.h>


#include "LayoutWindow.moc"

LayoutWindow::LayoutWindow(QWidget* parent, const char *name) :

 QMainWindow(parent, name) {

 this->setCaption("Layouts");

3. ΠΠ΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„ΠΈΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ QWidget для хранСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° QHBoxLayout, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΅Π³ΠΎ нСльзя Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ QMainWindow:

 QWidget *widget = new QWidget(this);

 setCentralWidget(widget);

 QHBoxLayout *horizontal = new QHBoxLayout(widget, 5, 10, "horizontal");

 QVBoxLayout *vertical = new QVBoxLayout();

 QLabel* label1 = new QLabel("Top", widget, "textLabel1");

 QLabel* label2 = new QLabel("Bottom", widget, "textLabel2");

 QLabel* label3 = new QLabel("Right", widget, "textLabel3");

 vertical->addwidget(label1);

 vertical->addwidget(label2);

 horizontal->addLayout(vertical);

 horizontal->addWidget(label3);

 resize(150, 100);

}


LayoutWindow::~LayoutWindow() { }


int main(int argc, char **argv) {

 QApplication app(argc, argv);

 LayoutWindow *window = new LayoutWindow();

 app.setMainWidget(window);

 window->show();

 return app.exec();

}

Как ΠΈ ΠΏΡ€Π΅ΠΆΠ΄Π΅, ΠΏΠ΅Ρ€Π΅Π΄ компиляциСй Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ moc для Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°:

$ moc LayoutWindow.h -ΠΎ LayoutWindow.moc

$ g++ -ΠΎ layout LayoutWindow.cpp -I$QTDIR/include -L$QTDIR/lib -lqui

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² эту ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ схСму размСщСния Π²Π°ΡˆΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠΊ QLabel (рис. 17.4). ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ ΠΎΠΊΠ½Π° ΠΈ посмотритС, ΠΊΠ°ΠΊ Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‚ΡΡ ΠΈ ΡΠΆΠΈΠΌΠ°ΡŽΡ‚ΡΡ ΠΌΠ΅Ρ‚ΠΊΠΈ, заполняя всС доступноС пространство.

Рис. 17.4


Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° LayoutWindow.cpp создаСт Π΄Π²Π° Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ для размСщСния Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ². Π’Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π΄Π²Π΅ ΠΌΠ΅Ρ‚ΠΊΠΈ, описанныС, соотвСтствСнно, ΠΊΠ°ΠΊ Top ΠΈ Bottom. Π“ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Ρ‚Π°ΠΊΠΆΠ΅ содСрТит Π΄Π²Π° Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°, ΠΌΠ΅Ρ‚ΠΊΡƒ, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Π½ΡƒΡŽ Right, ΠΈ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡ‡Π½Ρ‹Π΅ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ², ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅.

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ исходный тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² Ρ„Π°ΠΉΠ»Π΅ LayoutWindow.срр, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΎΡ‡Π½Ρ‹Π΅ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹.

ΠœΡ‹ рассмотрСли основы примСнСния Qt β€” сигналы ΠΈ слоты, ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ moc ΠΈ срСдства ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΡ€Π° Π±ΠΎΠ»Π΅Π΅ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹.

Π’ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ Qt

Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ случая Π² Qt Π΅ΡΡ‚ΡŒ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹, ΠΈ ΠΈΡ… ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ рассмотрСниС Π·Π°ΠΉΠΌΠ΅Ρ‚ всю ΠΎΡΡ‚Π°Π²ΡˆΡƒΡŽΡΡ Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠ½ΠΈΠ³ΠΈ. Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ познакомимся с Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°ΠΌΠΈ Qt ΠΎΠ±Ρ‰Π΅Π³ΠΎ примСнСния, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ для Π²Π²ΠΎΠ΄Π° Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠ½ΠΎΠΏΠΊΠΈ, ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΈ Ρ€Π°ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ΡΡ списки.

QLineEdit

QLineEdit β€” Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ для Π²Π²ΠΎΠ΄Π° однострочного тСкста. ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠΉΡ‚Π΅ Π΅Π³ΠΎ для Π²Π²ΠΎΠ΄Π° ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΡ… Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ² тСкста, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ имя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Π’ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π΅ QLineEdit ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ Π΄Π»ΠΈΠ½Ρƒ Π²Π²ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ тСкста с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ маски Π²Π²ΠΎΠ΄Π°, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‰Π΅ΠΉ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ шаблон, ΠΈΠ»ΠΈ для Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ контроля ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ допустимости, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Π²ΠΎΠ΄ΠΈΡ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹Π΅ Π΄Π°Ρ‚Ρƒ, Π½ΠΎΠΌΠ΅Ρ€ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π° ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹. Π£ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° QLineEdit Π΅ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ рСдактирования, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ части тСкста, Π²Ρ‹Ρ€Π΅Π·Π°Ρ‚ΡŒ ΠΈ Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ, ΠΎΡ‚ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒ измСнСния, ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Ρ‚Π°ΠΊ ΠΈ срСдствами API.