前言
QInputDialog类提供了一个简单的便捷对话框,可以从用户那里获取用户录入的单个值。当前Qt提供了五个静态接口函数用于获取常用的数据类型参数:
//单文本输入框
QString getText(QWidget *parent, const QString &title, const QString &label, QLineEdit::EchoMode mode = QLineEdit::Normal, const QString &text = QString(), bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags()
//int类型的接口
int getInt(QWidget *parent, const QString &title, const QString &label, int value = 0, int min = -2147483647, int max = 2147483647, int step = 1, bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())
//double类型的接口
double getDouble(QWidget *parent, const QString &title, const QString &label, double value = 0, double min = -2147483647, double max = 2147483647, int decimals = 1, bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags(), double step = 1)
//下拉选择框,单选框获取选中的某一列
QString getItem(QWidget *parent, const QString &title, const QString &label, const QStringList &items, int current = 0, bool editable = true, bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags(), Qt::InputMethodHints inputMethodHints = Qt::ImhNone)
//多文本输入框
QString getMultiLineText(QWidget *parent, const QString &title, const QString &label, const QString &text = QString(), bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags(), Qt::InputMethodHints inputMethodHints = Qt::ImhNone)
文本框样式 QLineEdit::EchoMode
类型 | 详细解释 |
---|---|
QLineEdit::Normal | 默认设置,输入时显示字符。 |
QLineEdit::NoEcho | 不要显示任何内容。这可能适用于密码,即使密码的长度也应保密。 |
QLineEdit::Password | 显示与平台相关的密码掩码字符,而不是实际输入的字符。 (例如输入 123456 实际显示****** ) |
QLineEdit::PasswordEchoOnEdit | 编辑时按输入显示字符,否则按密码显示字符。 |
输入模式提示Qt::InputMethodHints
类型 | 详细解释 |
---|---|
Qt::ImhNone | 不配置,系统默认 |
Qt::ImhHiddenText | 输入法不应在键入时显示字符。将QLineEdit::echoMode设置为密码时,会自动设置此选项。请注意,设置ImhHiddenText不会更改回声模式 |
Qt::Qt::ImhSensitiveData | 键入的文本不应该由活动输入法存储在任何持久性存储中,如预测用户词典。 (英文键盘,输入内容没有下划线,有输入提示) |
Qt::ImhNoAutoUppercase | 当句子结束时,输入法不应尝试自动切换到大写。 (英文键盘,输入内容没有下划线,有输入提示) |
Qt::ImhPreferNumbers | 首选数字(但不是必需的)。 (键盘中只有数字0-9,删除和回车) |
Qt::ImhPreferUppercase | 首选大写字母(但不是必需的)。 (数字+英文全键盘,shift键默认按下,高亮,数字显示不受影响) |
Qt::ImhPreferLowercase | 首选小写字母(但不是必需的)。 (数字+英文全键盘,shift不按下) |
Qt::ImhNoPredictiveText | 键入时不要使用预想文本(即字典查找)。 (键盘:0-9,-/:,.回车,空格,删除) |
Qt::ImhDate | 文本编辑器用作日期字段。 (日期间盘:数字0—9,.-/) |
Qt::ImhTime | 文本编辑器用作时间字段。 (时间键盘:数字0-9,:) |
Qt::ImhPreferLatin | 首选拉丁字符(但不是必需的)。 (英文键盘,带有输入提示,如输入g,提示going,带下划线,需回车确认输入) |
Qt::ImhMultiLine | 可以在文本字段中输入多行。 (英文键盘,带有输入提示,如输入g,提示going,带下划线,需回车确认输入) |
Qt::ImhNoEditMenu | 不要使用内置的编辑菜单。此标志在Qt 5.11中引入。 |
案例
QLineEdit::Normal
,Qt::ImhNone
QInputDialog *inputDialog = new QInputDialog(this);
bool getInfo;
QString down = inputDialog->getText(this,"输入下降量","请输入下降量",QLineEdit::Normal,"",&getInfo,Qt::WindowFlags(0),Qt::ImhNone);
if(getInfo){
s = s.append(down);
Send(s);
}
运行截图:
QLineEdit::Password
QInputDialog *inputDialog = new QInputDialog(this);
bool getInfo;
QString down = inputDialog->getText(this,"输入下降量","请输入下降量",QLineEdit::Password,"",&getInfo,Qt::WindowFlags(0),Qt::ImhHiddenText);
if(getInfo){
s = s.append(down);
Send(s);
}
在使用QLineEdit::Password
时,自动调用了Qt::ImhHiddenText
,此时Qt::InputMethodHints
位置可默认不填
修改后的代码如下:
QInputDialog *inputDialog = new QInputDialog(this);
bool getInfo;
QString down = inputDialog->getText(this,"输入下降量","请输入下降量",QLineEdit::Password,"",&getInfo,Qt::WindowFlags(0));
if(getInfo){
s = s.append(down);
Send(s);
}
运行截图: