QT_QInputDialog类输入对话框

文章目录

  • QT_QInputDialog类输入对话框
    • 五种静态便捷方法
      • [getText() --- 获取单行文本](#getText() — 获取单行文本)
      • [getInt() --- 获取整数](#getInt() — 获取整数)
      • [getDouble() --- 获取浮点数](#getDouble() — 获取浮点数)
      • [getItem() --- 从下拉列表选择](#getItem() — 从下拉列表选择)
      • [getMultiLineText() --- 获取多行文本(Qt 5.2 引入)](#getMultiLineText() — 获取多行文本(Qt 5.2 引入))
      • 参数说明总结
      • 案例

QT_QInputDialog类输入对话框

QInputDialog 是 Qt 提供的一个标准输入对话框类,用于从用户那里快速获取单个输入值(字符串、数字或列表选项)。它继承自 QDialog,属于 Qt Widgets 模块,无需自定义 UI 即可实现多种输入交互。

头文件与引入

cpp 复制代码
#include <QInputDialog>

五种静态便捷方法

QInputDialog 提供了 5 个静态方法,可以直接通过类名调用,无需手动创建对象:

getText() --- 获取单行文本

cpp 复制代码
bool ok;
QString text = QInputDialog::getText(
    this,                        // 父窗口
    "输入对话框",                  // 标题
    "请输入你的名字:",            // 提示标签
    QLineEdit::Normal,           // 回显模式(Normal=正常, Password=密码)
    "默认文字",                   // 默认值
    &ok                          // 是否点击了确定
);
if (ok && !text.isEmpty()) {
    qDebug() << "用户输入了:" << text;
}

将 QLineEdit::Normal 改为 QLineEdit::Password 即可实现密码输入(显示为 * 号)。

getInt() --- 获取整数

cpp 复制代码
bool ok;
int num = QInputDialog::getInt(
    this,
    "输入整数",
    "请输入年龄:",
    18,      // 默认值
    0,       // 最小值
    150,     // 最大值
    1,       // 步长(点上下箭头每次增减多少)
    &ok
);
if (ok) {
    qDebug() << "年龄:" << num;
}

getDouble() --- 获取浮点数

cpp 复制代码
bool ok;
double price = QInputDialog::getDouble(
    this,
    "输入价格",
    "请输入商品价格:",
    99.99,   // 默认值
    0.0,     // 最小值
    9999.0,  // 最大值
    2,       // 小数位数
    &ok
);
if (ok) {
    qDebug() << "价格:" << price;
}

getItem() --- 从下拉列表选择

cpp 复制代码
QStringList items;
items << "苹果" << "香蕉" << "橙子" << "葡萄";

bool ok;
QString item = QInputDialog::getItem(
    this,
    "选择水果",
    "请选择你喜欢的水果:",
    items,    // 选项列表
    0,        // 默认选中第0项
    false,    // false=只能选,true=还可以自己输入
    &ok
);
if (ok && !item.isEmpty()) {
    qDebug() << "用户选择了:" << item;
}

getMultiLineText() --- 获取多行文本(Qt 5.2 引入)

cpp 复制代码
bool ok;
QString text = QInputDialog::getMultiLineText(
    this,
    "输入地址",
    "请输入详细地址:",
    "默认地址内容",
    &ok
);
if (ok && !text.isEmpty()) {
    qDebug() << "地址:" << text;
}

参数说明总结

参数 说明
parent 父窗口,通常传 this,控制对话框居中显示和生命周期
title 对话框标题栏文字
label 输入框上方的提示文字
ok 布尔指针,用户点"确定"时为 true,点"取消"时为 false
value/text 输入框的默认值

案例

dialog.h

cpp 复制代码
#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <QGridLayout>
#include <QLineEdit>
#include <QPushButton>
#include <QLabel>
#include <QInputDialog>

class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QWidget *parent = nullptr);
    ~Dialog();
private:
    QGridLayout *glayout;

    QPushButton *inputStuNoBtn;
    QLineEdit *inputStuNoLineEdit;

    QPushButton *inputStuNameBtn;
    QLineEdit *inputStuNameLineEdit;


    QPushButton *inputStuSexBtn;
    QLineEdit *inputStuSexLineEdit;


    QPushButton *inputStuScoreBtn;
    QLineEdit *inputStuScoreLineEdit;
private slots:
    void modifyStudentNo();
    void modifyStudentSex();
    void modifyStudentName();
    void modifyStudentScore();
};
#endif // DIALOG_H

dialog.cpp

cpp 复制代码
#include "dialog.h"

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
    resize(260, 110);
    setWindowTitle("标准对话框测试");

    //布局
    glayout = new QGridLayout(this);

    inputStuNoBtn = new QPushButton;
    inputStuNoBtn->setText("学生学号");
    inputStuNoLineEdit = new QLineEdit("请输入学号");
    inputStuNoLineEdit->setReadOnly(true);


    inputStuNameBtn = new QPushButton;
    inputStuNameBtn->setText("学生姓名");
    inputStuNameLineEdit = new QLineEdit("请输入学生明明");
    inputStuNameLineEdit->setReadOnly(true);


    inputStuSexBtn = new QPushButton;
    inputStuSexBtn->setText("学生性别");
    inputStuSexLineEdit = new QLineEdit("选择性别");
    inputStuSexLineEdit->setReadOnly(true);


    inputStuScoreBtn = new QPushButton;
    inputStuScoreBtn->setText("学生成绩");
    inputStuScoreLineEdit = new QLineEdit("输入成绩");
    inputStuScoreLineEdit->setReadOnly(true);

    glayout->addWidget(inputStuNoBtn, 0, 0);
    glayout->addWidget(inputStuNoLineEdit, 0, 1);

    glayout->addWidget(inputStuNameBtn,1, 0);
    glayout->addWidget(inputStuNameLineEdit, 1, 1);

    glayout->addWidget(inputStuSexBtn, 2, 0);
    glayout->addWidget(inputStuSexLineEdit, 2, 1);


    glayout->addWidget(inputStuScoreBtn, 3, 0);
    glayout->addWidget(inputStuScoreLineEdit, 3, 1);

   connect(inputStuNoBtn, SIGNAL(clicked()), this, SLOT(modifyStudentNo()));
   connect(inputStuSexBtn, SIGNAL(clicked()), this, SLOT(modifyStudentSex()));
   connect(inputStuNameBtn, SIGNAL(clicked()), this, SLOT(modifyStudentName()));
   connect(inputStuScoreBtn, SIGNAL(clicked()), this, SLOT(modifyStudentScore()));
}

Dialog::~Dialog()
{
}

void Dialog::modifyStudentNo() {
    bool isbool;
    QString strText = QInputDialog::getText(this, "标准输入对话框", "请输入学号", QLineEdit::Normal, inputStuNoLineEdit->text(), & isbool);
    if (isbool && !strText.isEmpty()) {
        inputStuNoLineEdit->setText(strText);
    }
}
void Dialog::modifyStudentSex() {
    QStringList strSexItems;
    strSexItems << "男" << "女";

    bool isbool;
    QString strSelectSexItems = QInputDialog::getItem(this, "标准输入对话框", "请选择性别", strSexItems, 0, false, &isbool);
    if (isbool && !strSexItems.isEmpty()) {
        inputStuSexLineEdit->setText(strSelectSexItems);
    }
}
void Dialog::modifyStudentName() {
    bool isbool;
    QString strText = QInputDialog::getText(this, "标准输入对话框", "请输入姓名", QLineEdit::Normal, inputStuNameLineEdit->text(), &isbool);
    if (isbool && !strText.isEmpty()) {
        inputStuNameLineEdit->setText(strText);
    }
}
void Dialog::modifyStudentScore() {
    bool isbool;
    double score = QInputDialog::getDouble(this, "标准输入对话框", "请输入成绩", inputStuScoreLineEdit->text().toDouble(), 0, 100, 1, &isbool);
    if (isbool) {
        inputStuScoreLineEdit->setText(QString::number(score));
    }
}

效果

相关推荐
春生野草16 小时前
个人笔记——C语言字符串、树
c语言·开发语言·笔记
风中芦苇啊16 小时前
Java EasyExcel 导入通用工具类:自定义注解映射字段 + 反射机制
java·开发语言
PieroPc16 小时前
Python 写的 Windows凭据添加工具 第二版 解决Win11 23H2, 25H2,26H1,共享文件和打印 一部份问题,不是全部!
开发语言·windows·python
家有娇妻张兔兔16 小时前
Java 对接 PLC 主流型号最合适的方案:Apache PLC4X 实战指南
java·开发语言·plc·modbus·数据缓存·西门子s7·apache plc4x
The_Ticker17 小时前
大宗商品行情API接入教程
开发语言·python·websocket·程序人生·区块链
Infedium17 小时前
Qt嵌入式开发核心亮点:线程安全硬件交互技术
开发语言·qt
阿里嘎多学长17 小时前
2026-07-30 GitHub 热点项目精选
开发语言·程序员·github·代码托管
gugucoding17 小时前
24. 【Java】枚举:更安全的常量
java·开发语言
一只旭宝17 小时前
C++手写shared_ptr共享智能指针|原子引用计数、强弱引用控制块、赋值重载底层深度剖析
开发语言·c++·面试
神明不懂浪漫17 小时前
【第三章】链表
开发语言·数据结构·经验分享·笔记·链表