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

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

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

delete dialog;

Когда ΠΌΠ΅Ρ‚ΠΎΠ΄

exec
Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ, Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ автоматичСски скрываСтся, Π½ΠΎ Π²Ρ‹ всС Ρ€Π°Π²Π½ΠΎ удаляСтС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ· памяти.

Π£Ρ‡Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° вызываСтся

exec
, вся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° прСкращаСтся, поэтому, Ссли Π² вашСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π΅ΡΡ‚ΡŒ Π²Π°ΠΆΠ½Ρ‹ΠΉ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Π·Π°Ρ‚Ρ€Π°Ρ‡Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄, большС ΠΏΠΎΠ΄ΠΎΠΉΠ΄ΡƒΡ‚ нСмодальноС ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡƒΠΌΠΎΠ΄Π°Π»ΡŒΠ½ΠΎΠ΅ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹Π΅ ΠΎΠΊΠ½Π°.

ΠΠ΅ΠΌΠΎΠ΄Π°Π»ΡŒΠ½Ρ‹Π΅ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹Π΅ ΠΎΠΊΠ½Π°

ΠΠ΅ΠΌΠΎΠ΄Π°Π»ΡŒΠ½Ρ‹Π΅ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²Ρ‹Π΅ ΠΎΠΊΠ½Π° слСгка ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… основных ΠΎΠΊΠΎΠ½ ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ ΠΏΠΎΠ²Π΅Ρ€Ρ… своСго Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°, совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΈΡ… элСмСнт Π½Π° ΠΏΠ°Π½Π΅Π»ΠΈ Π·Π°Π΄Π°Ρ‡ ΠΈ автоматичСски ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹Π·Π²Π°Π½ слот

accept
ΠΈΠ»ΠΈ
reject
.

Для отобраТСния нСмодального Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° Π²Ρ‹Π·Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄

show
, ΠΊΠ°ΠΊ Π²Ρ‹ сдСлали Π±Ρ‹ для ΠΎΠΊΠ½Π°
QMainWindow
:

MyDialog *dialog = new MyDialog(this, "mydialog");

dialog->show();

Ѐункция

show
Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Π½Π° экран ΠΈ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ возвращаСтся Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ для продолТСния Ρ†ΠΈΠΊΠ»Π° выполнСния. Для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ слоты ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ с Π½ΠΈΠΌΠΈ связь:

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

Β QDialog(parent, name) {

Β ...

Β connect(ok_pushbutton, SIGNAL(clicked()), this, SLOT(OkClicked()));

Β connect(cancel_pushbutton, SIGNAL(clicked()), this, SLOT(CancelClicked()));

}

MyDialog::OkClicked() {

Β // Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ

}

MyDialog::CancelClicked() {

Β // Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ΅

}

Как ΠΈ Π² случаС модального ΠΎΠΊΠ½Π°, Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ автоматичСски скрываСтся ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ.

ΠŸΠΎΠ»ΡƒΠΌΠΎΠ΄Π°Π»ΡŒΠ½ΠΎΠ΅ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ

Для создания ΠΏΠΎΠ»ΡƒΠΌΠΎΠ΄Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π΄Π°Ρ‚ΡŒ Ρ„Π»Π°Π³ модального Ρ€Π΅ΠΆΠΈΠΌΠ° Π² конструкторС

QDialog
ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄
show
:

<b>QDialog(QWidget *parent=0, const char *name=0, bool modal=FALSE, WFlags f=0);</b>

Π’Ρ‹ Π½Π΅ Π·Π°Π΄Π°Π΅Ρ‚Π΅ Π² модальном Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΌ ΠΎΠΊΠ½Π΅ Ρ„Π»Π°Π³ модального Ρ€Π΅ΠΆΠΈΠΌΠ° Ρ€Π°Π²Π½Ρ‹ΠΌ

TRUE
, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π²Ρ‹Π·ΠΎΠ²
exec
заставляСт Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π² ΠΌΠΎΠ΄Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ нСзависимо ΠΎΡ‚ значСния этого Ρ„Π»Π°Π³Π°.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ вашСго Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

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

Β QDialog(parent, name, TRUE) {

Β ...

}

ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π²Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ вашС Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ, Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ

show
ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅ свою ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ, пСриодичСски вызывая
QApplication::processEvents
для обновлСния вашСго диалогового окна:

MySMDialog *dialog = MySMDialog(this, &quot;semimodal&quot;);

dialog-&gt;show();

while (processing) {

Β doSomeProcessing();

Β app-&gt;processEvents();

Β if (dialog-&gt;wasCancelled()) break;

}

ΠŸΠ΅Ρ€Π΅Π΄ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ΠΌ выполнСния ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, Π½Π΅ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΎ Π»ΠΈ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ. Π˜ΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ функция

wasCancelled
Π½Π΅ являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ класса
QDialog
β€” Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΅Π΅ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ.

ΠšΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ Qt прСдоставляСт Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ подклассы класса

QDialog
, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Π²Ρ‹Π±ΠΎΡ€ Ρ„Π°ΠΉΠ»ΠΎΠ², Π²Π²ΠΎΠ΄ тСкста, индикация процСсса выполнСния ΠΈ Π²Ρ‹Π²ΠΎΠ΄ ΠΎΠΊΠ½Π° сообщСния. ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ этих Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² Π² Π»ΡŽΠ±Ρ‹Ρ… прилоТСниях ΡƒΠ±Π΅Ρ€Π΅ΠΆΠ΅Ρ‚ вас ΠΎΡ‚ мноТСства нСприятностСй ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

QMessageBox

QMessageBox
β€” модальноС Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‰Π΅Π΅ простоС сообщСниС с ΠΏΠΈΠΊΡ‚ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌΠΈ. ΠŸΠΈΠΊΡ‚ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° зависит ΠΎΡ‚ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎΡΡ‚ΠΈ сообщСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ свСдСния ΠΈΠ»ΠΈ прСдупрСТдСния ΠΈ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Π²Π°ΠΆΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ.

У класса

QMessageBox
Π΅ΡΡ‚ΡŒ статичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ создания ΠΈ отобраТСния ΠΎΠΊΠΎΠ½ всСх Ρ‚Ρ€Π΅Ρ… пСрСчислСнных Ρ‚ΠΈΠΏΠΎΠ²:

<b>#include &lt;qmessagebox.h&gt;</b>

<b>int information(QWidget *parent, const QString&amp; caption,</b>

<b>Β const QString&amp;text, int button0, int button1=0, int button2=0);</b>

<b>int warning(QWidget *parent, const QString&amp; caption,</b>

<b>Β const QString&amp; text, int button0, int button1, int button2=0);</b>

<b>int critical(QWidget *parent, const QString&amp; caption,</b>

<b>Β const QString&amp; text, int button0, int button1, int button2=0);</b>

МоТно Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΈΠ· списка Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… ΠΊΠ½ΠΎΠΏΠΎΠΊ

QMessageBox
, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… значСниям, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΌ статичСскими ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ:

β–‘

QMessageBox::Ok
;

β–‘

QMessageBox::Cancel
;

β–‘

QMessageBox::Yes
;

β–‘

QMessageBox::No
;

β–‘

QMessageBox::Abort
;

β–‘

QMessageBox::Retry
;

β–‘

QMessageBox::Ignore
.

Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования ΠΎΠΊΠ½Π°

QMessageBox
Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π΄Π°Π»Π΅Π΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°:

int result = QMessageBox::information(this,

Β &quot;Engine Room Query&quot;,

Β &quot;Do you wish to engage the HyperDrive?&quot;,

Β QMessageBox::Yes | QMessageBox::Default,

Β QMessageBox::No | QMessageBox::Escape);

switch (result) {

case QMessageBox::Yes:

Β hyperdrive-&gt;engage();