文章目录
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));
}
}
效果
