QInputDialog — это диалоговое окно из библиотеки QtWidgets, предназначенное для быстрого и удобного получения простых данных от пользователя, таких как текст, числа или выбор из списка. В этой статье мы рассмотрим, как использовать QInputDialog, приведем примеры и обсудим типичные сценарии применения.
Когда использовать QInputDialog
Если вам нужно запросить у пользователя:
- строку (например, имя),
- целое или дробное число,
- элемент из списка (например, выбор опции),
то QInputDialog — это быстрый и удобный способ реализовать такой ввод без создания собственного диалога.
Импорт заголовка
#include <QInputDialog>
Запрос строки (текста)
bool ok;
QString text = QInputDialog::getText(
this,
"Введите имя",
"Имя:",
QLineEdit::Normal,
"",
&ok
);
if (ok && !text.isEmpty()) {
qDebug() << "Пользователь ввел:" << text;
}
Пояснение параметров:
this— родительский виджет."Введите имя"— заголовок окна."Имя:"— метка поля.QLineEdit::Normal— режим редактирования (есть такжеPasswordиNoEcho).""— значение по умолчанию.&ok— флаг, будетtrue, если пользователь нажал «OK».
Запрос целого числа
bool ok;
int value = QInputDialog::getInt(
this,
"Выбор значения",
"Введите число от 1 до 100:",
10, // значение по умолчанию
1, // минимум
100, // максимум
1, // шаг
&ok
);
if (ok) {
qDebug() << "Выбрано число:" << value;
}
Запрос дробного (вещественного) числа
bool ok;
double value = QInputDialog::getDouble(
this,
"Ввод дробного числа",
"Введите значение:",
3.14, // по умолчанию
0.0, // минимум
100.0, // максимум
2, // количество знаков после запятой
&ok
);
if (ok) {
qDebug() << "Вы ввели:" << value;
}
Выбор из списка
bool ok;
QStringList items;
items << "Красный" << "Зелёный" << "Синий";
QString item = QInputDialog::getItem(
this,
"Выбор цвета",
"Цвет:",
items,
0, // индекс по умолчанию
false, // можно ли редактировать
&ok
);
if (ok && !item.isEmpty()) {
qDebug() << "Выбран цвет:" << item;
}
Установка шрифта и других параметров
Хотя QInputDialog — это модальный диалог по умолчанию, вы можете создавать экземпляр вручную и настраивать его:
QInputDialog *dialog = new QInputDialog(this);
dialog->setLabelText("Введите пароль:");
dialog->setTextEchoMode(QLineEdit::Password);
dialog->setWindowTitle("Безопасный ввод");
if (dialog->exec() == QDialog::Accepted) {
QString password = dialog->textValue();
qDebug() << "Пароль:" << password;
}
Преимущества и ограничения
Плюсы:
- Быстрая реализация.
- Поддержка разных типов данных.
- Минимум кода.
Минусы:
- Мало возможностей кастомизации интерфейса.
- Не подходит для сложных форм или проверки данных по ходу ввода.
Заключение
QInputDialog — мощный инструмент для быстрой реализации пользовательского ввода в приложениях Qt. Он особенно полезен для прототипирования, простых программ или вспомогательных функций, где нет необходимости в сложной форме ввода.
Если вам нужно более сложное поведение (валидация, несколько полей), рассмотрите возможность создания собственного диалога с помощью QDialog.
