В Qt имеются классы таких стандартных диалоговых окон:
- QColorDialog - Диалоговое окно для задания цвета.
- QErrorMessage - Диалоговое окно ошибки.
- QFileDialog - Диалог для выбора файла, или каталога.
- QFontDialog - Диалог для выбора шрифта.
- QInputDialog - Диалог ввода значения.
- QMessageBox - Диалоговые сообщения.
- QPrintDialog - Диалог вывода на печать.
- QProgressDialog - Обратная связь с индикатором выполнения во время длительного процесса.
1. Диалоговое окно для задания цвета
Вызов окна осуществляется следующим образом:#include <QtGui> ... QColor color = QColorDialog::getColor(Qt::red, this); if ( color.isValid() ){ ... }
2. Диалоговое окно ошибки
Вывод сообщения об ошибке в специальном окошке:#include <QtGui> ... QErrorMessage errorMessage; errorMessage.showMessage("Testing Error message"); errorMessage.exec();
3. Диалог для выбора файла, или каталога
-
Сохранение файла:
#include <QtGui> ... QString fileName = QFileDialog::getSaveFileName(this, QString::fromUtf8("Сохранить файл"), QDir::currentPath(), "Images (*.png *.xpm *.jpg);;All files (*.*)");
-
Открытие одного файла:
#include <QtGui> ... QString fileName = QFileDialog::getOpenFileName(this, QString::fromUtf8("Открыть файл"), QDir::currentPath(), "Images (*.png *.xpm *.jpg);;All files (*.*)");
-
Открытие нескольких файла:
#include <QtGui> ... QStringList files = QFileDialog::getOpenFileNames(this, QString::fromUtf8("Выберите один, или более файлов"), QDir::currentPath(), "Images (*.png *.xpm *.jpg);;All files (*.*)");
-
Открытие каталога:
#include <QtGui> ... QString dir = QFileDialog::getExistingDirectory(this, QString::fromUtf8("Открыть папку"), QDir::currentPath(), QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
4. Диалог для выбора шрифта
#include <QtGui> ... bool ok; QFont font = QFontDialog::getFont(&ok, QFont("Times", 12), this, QString::fromUtf8("Выберите шрифт")); if (ok) { // устанавливается выбранный пользователем шрифт } else { // Пользователь нажал кнопку "Cancel"; Устанавливается начальный шрифт. //В данном случае Times, 12. }
5. Диалог ввода значения
-
Ввод дробного числа:
#include <QtGui> ... bool ok; double d = QInputDialog::getDouble(this, QString::fromUtf8("Введите сумму"), QString::fromUtf8("Сумма:"), 0.00, -10000, 10000, 3, &ok); if (ok){ ui->listWidget->clear(); ui->listWidget->addItem(QString::fromUtf8("%1 денег").arg(d)); }
Параметры методаgetDouble()
по порядку: (1) родительский виджет, (2) заголовок диалогового окна, (3) надпись над полем ввода, (4) стартовое значение, (5) минимальное значение, (6) максимальное значение, (7) количество знаков после запятой, (8) если была нажата кнопкаCancel
, тоfalse
, иначе -true
. -
Ввод целого числа:
#include <QtGui> ... bool ok; int i = QInputDialog::getInt(this, QString::fromUtf8("Введите процент"), QString::fromUtf8("Процент:"), 25, 0, 100, 1, &ok); if (ok){ ui->listWidget->clear(); ui->listWidget->addItem(QString::fromUtf8("%1%").arg(i)); }
-
Ввод текста:
#include <QtGui> ... bool ok; QString text = QInputDialog::getText(this, QString::fromUtf8("Введите текст"), QString::fromUtf8("Ваш текст:"), QLineEdit::Normal, QDir::home().dirName(), &ok); if (ok && !text.isEmpty()){ ui->listWidget->clear(); ui->listWidget->addItem(QString::fromUtf8("%1").arg(text)); }
-
Выбор значения из списка:
#include <QtGui> ... QStringList items; items << QString::fromUtf8("Весна") << QString::fromUtf8("Лето") << QString::fromUtf8("Осень") << QString::fromUtf8("Зима"); bool ok; QString item = QInputDialog::getItem(this, QString::fromUtf8("Выберите сезон"), QString::fromUtf8("Сезон:"), items, 1, false, &ok); if (ok && !item.isEmpty()){ ui->listWidget->clear(); ui->listWidget->addItem(item); }
Параметры методаgetItem()
по порядку: (1) родительский виджет, (2) заголовок диалогового окна, (3) надпись над списком выбора, (4) список значений, (5) начальный элемент, (6) редактируемый список, (7) если была нажата кнопкаCancel
, тоfalse
, иначе -true
.
6. Диалоговые сообщения
-
Окно About:
#include <QtGui> ... QMessageBox::about(this, "Title", "Text");
-
Окно About Qt:
#include <QtGui> ... QMessageBox::aboutQt(this, "Title About Qt");
-
Критические сообщения:
#include <QtGui> ... QMessageBox::StandardButton reply; reply = QMessageBox::critical(this, QString::fromUtf8("Критическая ошибка"), QString::fromUtf8("Сообщение при критической ошибке"), QMessageBox::Abort | QMessageBox::Retry | QMessageBox::Ignore); ui->listWidget->clear(); switch (reply){ case QMessageBox::Abort: ui->listWidget->addItem("Abort"); break; case QMessageBox::Retry: ui->listWidget->addItem("Retry"); break; case QMessageBox::Ignore: ui->listWidget->addItem("Ignore"); break; default: break; }
-
Информативные сообщения:
#include <QtGui> ... QMessageBox::StandardButton reply; reply = QMessageBox::information(this, QString::fromUtf8("Сообщение"), QString::fromUtf8("Информативное сообщение")); ui->listWidget->clear(); if (reply == QMessageBox::Ok) ui->listWidget->addItem("Ok"); else ui->listWidget->addItem("Escape");
-
Вопросительные сообщения:
#include <QtGui> ... QMessageBox::StandardButton reply; reply = QMessageBox::question(this, QString::fromUtf8("Сообщение"), QString::fromUtf8("Здесь текст вопроса"), QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel); ui->listWidget->clear(); if (reply == QMessageBox::Yes) ui->listWidget->addItem("Yes"); else if (reply == QMessageBox::No) ui->listWidget->addItem("No"); else ui->listWidget->addItem("Cancel");
-
Предупредительные сообщения:
#include <QtGui> ... QMessageBox msgBox(QMessageBox::Warning, QString::fromUtf8("Предупреждение"), QString::fromUtf8("Будьте осторожны..."), 0, this); msgBox.addButton(QString::fromUtf8("&Сохранить снова"), QMessageBox::AcceptRole); msgBox.addButton(QString::fromUtf8("&Продолжить"), QMessageBox::RejectRole); ui->listWidget->clear(); if (msgBox.exec() == QMessageBox::AcceptRole) ui->listWidget->addItem("Save Again"); else ui->listWidget->addItem("Continue");
7. Диалог вывода на печать
#include <QtGui> ... QPrinter printer; QPrintDialog printDialog(&printer, this); if (printDialog.exec() == QDialog::Accepted) { // print ... }
8. Обратная связь с индикатором выполнения во время длительного процесса
Пример использования классаQProgressDialog
представлен ниже:
#include <QtGui> ... // Operation constructor Operation::Operation(QObject *parent) : QObject(parent), steps(0) { pd = new QProgressDialog("Operation in progress.", "Cancel", 0, 100); connect(pd, SIGNAL(canceled()), this, SLOT(cancel())); t = new QTimer(this); connect(t, SIGNAL(timeout()), this, SLOT(perform())); t->start(0); } void Operation::perform() { pd->setValue(steps); //... perform one percent of the operation steps++; if (steps > pd->maximum()) t->stop(); } void Operation::cancel() { t->stop(); //... cleanup }Удачи!
Спасибо.
ОтветитьУдалитьОтлично! Все ясно и читабельно! Благодаря Вам я сдам преддипломную практику и главное узнаю полезные фишечки!
ОтветитьУдалитьВсе очень доступно и понятно! Прозрачный код, спасибо!
ОтветитьУдалитьКак всегда радуют возможности Qt!