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

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

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

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

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

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

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

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

 QDialog(parent, name, TRUE) {

 ...

}

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

MySMDialog *dialog = MySMDialog(this, "semimodal");

dialog->show();

while (processing) {

 doSomeProcessing();

 app->processEvents();

 if (dialog->wasCancelled()) break;

}

ΠŸΠ΅Ρ€Π΅Π΄ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ΠΌ выполнСния ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, Π½Π΅ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΎ Π»ΠΈ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ. Π˜ΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ функция wasCancelled Π½Π΅ являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ класса QDialog β€” Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΅Π΅ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ.

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

QMessageBox

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

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

#include <qmessagebox.h>

int information(QWidget *parent, const QString& caption,

 const QString&text, int button0, int button1=0, int button2=0);

int warning(QWidget *parent, const QString& caption,

 const QString& text, int button0, int button1, int button2=0);

int critical(QWidget *parent, const QString& caption,

 const QString& text, int button0, int button1, int button2=0);

МоТно Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΈΠ· списка Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… ΠΊΠ½ΠΎΠΏΠΎΠΊ QMessageBox, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… значСниям, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΌ статичСскими ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ:

β–‘ QMessageBox::Ok;

β–‘ QMessageBox::Cancel;

β–‘ QMessageBox::Yes;

β–‘ QMessageBox::No;

β–‘ QMessageBox::Abort;

β–‘ QMessageBox::Retry;

β–‘ QMessageBox::Ignore.

Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования ΠΎΠΊΠ½Π° QMessageBox Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π΄Π°Π»Π΅Π΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°:

int result = QMessageBox::information(this,

 "Engine Room Query",

 "Do you wish to engage the HyperDrive?",

 QMessageBox::Yes | QMessageBox::Default,

 QMessageBox::No | QMessageBox::Escape);

switch (result) {

case QMessageBox::Yes:

 hyperdrive->engage();

 break;

case QMessageBox::No:

 // сдСлайтС Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΅Ρ‰Π΅

 break;

}

Π’Ρ‹ соСдинили ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ OR (|) ΠΊΠΎΠ΄Ρ‹ ΠΊΠ½ΠΎΠΏΠΎΠΊ с Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ Default ΠΈ Escape, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π΄Π°Ρ‚ΡŒ стандартныС дСйствия, ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ клавиш <Enter> (ΠΈΠ»ΠΈ <Return>) ΠΈ <Esc>. Π Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° рис. 17.8.

Рис. 17.8 

QInputDialog

Окно QInputDialog ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для Π²Π²ΠΎΠ΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π±ΡƒΠ΄ΡŒ Ρ‚ΠΎ тСкст, Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Ρ€Π°ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎΡΡ списка, цСлочислСнноС ΠΈΠ»ΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π£ класса QInputDialog Π΅ΡΡ‚ΡŒ статичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ QMessageBox, ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΠΈΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρƒ Π½ΠΈΡ… слишком ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΊ ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Ρƒ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΈΠ· Π½ΠΈΡ… Π΅ΡΡ‚ΡŒ значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ:

#include <qinputdialog.h>

QString getText(const QString& caption, const QString& label,

 QLineEdit::EchoMode mode=QLineEdit::Normal,

 const QString& text=QString::null,

 bool* ok = 0, QWidget* parent = 0, const char * name = 0);

QString getItem(const QString& caption, const QString& label,

 const QStringList& list, int current=0, bool editable=TRUE,

 bool* ok=0, QWidget* parent = 0, const char* name=0)

int getInteger(const QString& caption, const QString& label,

 int num=0, int from = -2147483647, int to = 2147483647,

 int step = 1, bool* ok = 0, QWidget* parent = 0, const char* name = 0);

double getDouble(const QString& caption, const QString& label,

 double num = 0, double from = -2147483647, double to = 2147483647,

 int decimals = 1, bool* ok = 0, QWidget* parent = 0, const char* name = 0);

Для Π²Π²ΠΎΠ΄Π° строки тСкста Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π°:

bool result;

QString text = QInputDialog::getText("Question", "What is your Quest?:",

 QLineEdit::Normal, QString::null, &result, this, "input");

if (result) {

 doSomething(text);

} else {

 // ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π°ΠΆΠ°Π» Cancel

}

Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· рис. 17.9, ΠΎΠΊΠ½ΠΎ QInputDialog создано с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° QLineEdit ΠΈ ΠΊΠ½ΠΎΠΏΠΎΠΊ OK ΠΈ Cancel.

Рис. 17.9 


Π”ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ, созданноС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ QInputDialog::getText, примСняСт Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ QLineEdit. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ€Π΅ΠΆΠΈΠΌΠ° рСдактирования, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΉ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ getText, управляСт способом отобраТСния Π½Π°Π±ΠΈΡ€Π°Π΅ΠΌΠΎΠ³ΠΎ тСкста Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ€Π΅ΠΆΠΈΠΌΠ° Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° QLineEdit. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π·Π°Π΄Π°Ρ‚ΡŒ тСкст, Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΈΠ»ΠΈ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π΅ пустым, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° рис. 17.9. Π£ всСх ΠΎΠΊΠΎΠ½ QInputDialog Π΅ΡΡ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΠΈ OK ΠΈ Cancel, ΠΈ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ пСрСдаСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Ρ‚ΠΈΠΏΠ° bool для обозначСния Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ β€” Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π²Π΅Π½ TRUE, Ссли ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Ρ‰Π΅Π»ΠΊΠ°Π΅Ρ‚ ΠΌΡ‹ΡˆΡŒΡŽ ΠΊΠ½ΠΎΠΏΠΊΡƒ OK.

ΠœΠ΅Ρ‚ΠΎΠ΄ getItem с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ€Π°ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎΡΡ списка QComboBox ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ список Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ²:

bool result;

QStringList options;

options << "London" << "New York" << "Paris";

QString city = QInputDialog::getItem("Holiday", "Please select a

 destination:", options, 1, TRUE, &result, this, "combo");

if (result) selectDestination(city);

Π‘ΠΎΠ·Π΄Π°Π½Π½ΠΎΠ΅ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° рис. 17.10.

Рис. 17.10 


Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ getInteger ΠΈ getDouble Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ, поэтому ΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ Π½Π° Π½ΠΈΡ… ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ.

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ qmake для упрощСния написания make-Ρ„Π°ΠΉΠ»ΠΎΠ²

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ прилоТСния с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ KDE ΠΈ Qt становится ΡƒΡ‚ΠΎΠΌΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ занятиСм, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ваш make-Ρ„Π°ΠΉΠ» получаСтся ΠΎΡ‡Π΅Π½ΡŒ слоТным ΠΈΠ·-Π·Π° нСобходимости ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ moc ΠΈ ΠΈΠΌΠ΅Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ здСсь, Ρ‚Π°ΠΌ ΠΈ Π²Π΅Π·Π΄Π΅. К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Qt поставляСтся с ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΎΠΉ qmake для создания Π²Π°ΡˆΠΈΡ… make-Ρ„Π°ΠΉΠ»ΠΎΠ².

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

Если Π²Ρ‹ ΡƒΠΆΠ΅ пользовались ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ΠΎΠΌ Qt, Π²Π°ΠΌ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π·Π½Π°ΠΊΠΎΠΌΠ° ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° tmake β€” Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½Π΅Π΅ (ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅Π΅) Π²ΠΎΠΏΠ»ΠΎΡ‰Π΅Π½ΠΈΠ΅ qmake, ΠΏΠΎΡΡ‚Π°Π²Π»ΡΠ²ΡˆΠ΅Π΅ΡΡ с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌΠΈ вСрсиями Qt.

Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° qmake ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π² качСствС Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ» .pro. Π­Ρ‚ΠΎΡ‚ Ρ„Π°ΠΉΠ» содСрТит самыС сущСствСнныС свСдСния, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для компиляции, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ исходныС тСксты, Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΈ мСстонахоТдСния Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ KDE/Qt.

Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ pro-Ρ„Π°ΠΉΠ» срСды KDE выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

TARGET = app

MOC_DIR = moc

OBJECTS_DIR = obj

INCLUDEPATH = /usr/include/kde

QMAKE_LIBDIR_X11 += /usr/lib

QMAKE_LIBS_X11 += -lkdeui -lkdecore

SOURCES = main.cpp window.cpp

HEADERS = window.h

Π’Ρ‹ Π·Π°Π΄Π°Π΅Ρ‚Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ moc ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΏΡƒΡ‚ΡŒ ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ KDE ΠΈ исходныС тСксты, ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… формируСтся ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π£Ρ‡Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ мСстонахоТдСниС Ρ„Π°ΠΉΠ»ΠΎΠ² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² KDE зависит ΠΎΡ‚ вашСго дистрибутива. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ SUSE Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΈΡ€Π°Π²Π½ΡΡ‚ΡŒ INCLUDEPATH ΠΏΡƒΡ‚ΡŒ /opt/kde3/include ΠΈ QMAKE_LIBS_X11 ΠΏΡƒΡ‚ΡŒ /opt/kde3/lib.