В 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!