QInputDialog в Qt: простой способ получать данные от пользователя

Автор: | 15 июня, 2025

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.