break;
case QMessageBox::No:
// сделайте что-нибудь еще
break;
}
Вы соединили операцией
OR
(
|
) коды кнопок с вариантами
Default
и
Escape
, чтобы задать стандартные действия, при нажатии клавиш <Enter> (или <Return>) и <Esc>. Результирующее диалоговое окно показано на рис. 17.8.
Рис. 17.8
QInputDialog
Окно
QInputDialog
полезно для ввода пользователем отдельных значений, будь то текст, вариант раскрывающегося списка, целочисленное или действительное значение. У класса
QInputDialog
есть статические методы, например
QMessageBox
, создающие некоторые проблемы, поскольку у них слишком много параметров, к счастью, у большинства из них есть значения по умолчанию:
<b>#include <qinputdialog.h></b>
<b>QString getText(const QString& caption, const QString& label,</b>
<b> QLineEdit::EchoMode mode=QLineEdit::Normal,</b>
<b> const QString& text=QString::null,</b>
<b> bool* ok = 0, QWidget* parent = 0, const char * name = 0);</b>
<b>QString getItem(const QString& caption, const QString& label,</b>
<b> const QStringList& list, int current=0, bool editable=TRUE,</b>
<b> bool* ok=0, QWidget* parent = 0, const char* name=0)</b>
<b>int getInteger(const QString& caption, const QString& label,</b>
<b> int num=0, int from = -2147483647, int to = 2147483647,</b>
<b> int step = 1, bool* ok = 0, QWidget* parent = 0, const char* name = 0);</b>
<b>double getDouble(const QString& caption, const QString& label,</b>
<b> double num = 0, double from = -2147483647, double to = 2147483647,</b>
<b> int decimals = 1, bool* ok = 0, QWidget* parent = 0, const char* name = 0);</b>
Для ввода строки текста напишите следующий фрагмент кода:
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
создано с помощью виджета QLi
n
eEdit и кнопок
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