QInputDialog
类提供了一个简单方便的对话框,用于从用户获取单个值。
输入值可以是字符串
、数字
或列表
中的项。必须设置一个标签来告诉用户他们应该输入什么。
提供了五个静态方便函数:getText()
、getMultiLineText()
、getInt()
、getDouble()
和getItem()
。所有的函数都可以以类似的方式使用,例如:
bool ok;
QString text = QInputDialog::getText(this, tr("QInputDialog::getText()"),
tr("User name:"), QLineEdit::Normal,
QDir::home().dirName(), &ok);
if (ok && !text.isEmpty())
textLabel->setText(text);
bool ok;
QString text = QInputDialog::getMultiLineText(this, tr("QInputDialog::getMultiLineText()"),
tr("User name:"), tr("text"), &ok);
if (ok && !text.isEmpty())
ui->lineEdit->setText(text);
bool ok;
int text = QInputDialog::getInt(this, tr("QInputDialog::getInt()"),
tr("User name:"), 0, -10, 10, 1, &ok);
if (ok)
ui->lineEdit->setText(QString::number(text));
bool ok;
int text = QInputDialog::getDouble(this, tr("QInputDialog::getDouble()"),
tr("User name:"), 0, -10, 10, 2, &ok);
if (ok)
ui->lineEdit->setText(QString::number(text));
bool ok;
QString strText = QInputDialog::getItem(this, tr("QInputDialog::getItem()"),
tr("User name:"), QStringList() << "hello" << "world" << "earth", 0, false, &ok);
if(ok && !strText.isEmpty())
{
ui->lineEdit->setText(strText);
}
效果图如下:
如果用户单击ok,则ok变量被设置为true;否则,设置为false。
标准对话框示例展示了如何使用QInputDialog
以及其他内置Qt对话框。
enum QInputDialog::InputDialogOption
:此enum指定影响输入对话框外观的各种选项。常量 | 值 | 描述 | 解释 |
---|---|---|---|
QInputDialog::NoButtons | 0x00000001 | Don’t display OK and Cancel buttons (useful for “live dialogs”). | 不要显示“确定”和“取消”按钮(对“实时对话框”很有用)。 |
QInputDialog::UseListViewForComboBoxItems | 0x00000002 | Use a QListView rather than a non-editable QComboBox for displaying the items set with setComboBoxItems(). | 使用QListView而不是不可编辑的QComboBox来显示setComboBoxItems()设置的项。 |
QInputDialog::UsePlainTextEditForTextInput | 0x00000004 | Use a QPlainTextEdit for multiline text input. This value was introduced in 5.2. | 使用QPlainTextEdit进行多行文本输入。该值在5.2中引入。 |
调用:
可以使用void QInputDialog::setOption(InputDialogOption option, bool on = true)
进行调用。
示例:
QInputDialog dlg;
dlg.setOption(QInputDialog::UseListViewForComboBoxItems);
dlg.setComboBoxItems(QStringList() << "1" << "2" << "3");
dlg.exec();
enum QInputDialog::InputMode
:这个枚举描述了对话框可以选择的不同输入模式。常量 | 值 | 描述 | 解释 |
---|---|---|---|
QInputDialog::TextInput | 0 | Used to input text strings. | 用于输入文本字符串。 |
QInputDialog::IntInput | 1 | Used to input integers. | 用于输入整数。 |
QInputDialog::DoubleInput | 2 | Used to input floating point numbers with double precision accuracy. | 用于输入双精度精度的浮点数。 |
调用:
可以使用void setInputMode(InputMode mode)
进行调用。
示例:
QInputDialog dlg;
dlg.setInputMode(QInputDialog::IntInput);
dlg.exec();
QString cancelButtonText() const
:返回取消按钮的文本。QStringList comboBoxItems() const
:返回下拉框的所有选项。int doubleDecimals() const
:返回双精度浮点数的精度,即小数点后的位数。double doubleMaximum() const
:返回双精度浮点数的最大值。double doubleMinimum() const
:返回双精度浮点数的最小值。double doubleValue() const
:返回当前输入的双精度浮点数值。InputMode inputMode() const
:返回输入模式,可能为数值、日期、时间等。int intMaximum() const
:返回整数的最大值。int intMinimum() const
:返回整数的最小值。int intStep() const
:返回每次增加或减少的整数值。int intValue() const
:返回当前输入的整数值。bool isComboBoxEditable() const
:返回下拉框是否可编辑。QString labelText() const
:返回标签的文本。QString okButtonText() const
:返回确认按钮的文本。void open(QObject *receiver, const char *member)
:打开输入对话框,并将指定的对象(receiver)和成员函数(member)连接起来,以响应对话框中的操作。InputDialogOptions options() const
:返回输入对话框的选项,如是否显示取消按钮、是否可编辑等。- `void setCancelButtonText(const QString &text):设置取消按钮的文本。
void setComboBoxEditable(bool editable)
:设置下拉框是否可编辑。void setComboBoxItems(const QStringList &items)
:设置下拉框的所有选项。void setDoubleDecimals(int decimals)
:设置双精度浮点数的精度,即小数点后的位数。void setDoubleMaximum(double max)
:设置双精度浮点数的最大值。void setDoubleMinimum(double min)
:设置双精度浮点数的最小值。void setDoubleRange(double min, double max)
:设置双精度浮点数的范围,包括最小值和最大值。void setDoubleValue(double value)
:设置当前输入的双精度浮点数值。void setInputMode(InputMode mode)
:设置输入模式,可能为数值、日期、时间等。void setIntMaximum(int max)
:设置整数的最大值。void setIntMinimum(int min)
:设置整数的最小值。void setIntRange(int min, int max)
:设置整数的范围,包括最小值和最大值。void setIntStep(int step)
:设置每次增加或减少的整数值。void setIntValue(int value)
:设置当前输入的整数值。void setLabelText(const QString &text)
:设置标签的文本。void setOkButtonText(const QString &text)
:设置确认按钮的文本。void setOption(InputDialogOption option, bool on = true)
:设置输入对话框的选项,如是否显示取消按钮、是否可编辑等。void setOptions(InputDialogOptions options)
:设置输入对话框的所有选项,包括是否显示取消按钮、是否可编辑等。void setTextEchoMode(QLineEdit::EchoMode mode)
:设置文本回显模式,用于文本框显示文本的方式。void setTextValue(const QString &text)
:设置文本框的文本值。bool testOption(InputDialogOption option) const
:测试输入对话框的选项是否开启。QLineEdit::EchoMode textEchoMode() const
:返回文本框的文本回显模式。QString textValue() const
:返回文本框的文本值。
void doubleValueChanged(double value)
:当双精度浮点数值改变时调用。参数value表示新的双精度浮点数值。void doubleValueSelected(double value)
:当用户从下拉框中选择一个双精度浮点数值时调用。参数value表示用户选择的双精度浮点数值。void intValueChanged(int value)
:当整数值改变时调用。参数value表示新的整数值。void intValueSelected(int value)
:当用户从下拉框中选择一个整数值时调用。参数value表示用户选择的整数值。void textValueChanged(const QString &text)
:当文本值改变时调用。参数text表示新的文本值。void textValueSelected(const QString &text)
:当用户从下拉框中选择一个文本值时调用。参数text表示用户选择的文本值。
QInputDialog dlg;
dlg.setOkButtonText("确定");
dlg.setCancelButtonText("取消");
dlg.setTextValue("设置文本");
// 设置下拉框
dlg.setComboBoxItems(QStringList() << "1" << "2" << "3");
// 下拉框可编辑
dlg.setComboBoxEditable(true);
// 设置输入模式
dlg.setInputMode(QInputDialog::TextInput);
// 设置显示选项
dlg.setOption(QInputDialog::UseListViewForComboBoxItems);
// 设置文本显示模式
dlg.setTextEchoMode(QLineEdit::Password);
dlg.exec();
QInputDialog
的getText
方法来显示一个文本输入框,并获取用户输入的文本信息。getInt
或getDouble
方法来显示相应的输入框,并获取用户输入的整数或双精度浮点数值。总之,QInputDialog是一种非常方便的对话框类,可以用于各种需要获取用户输入数据的情况。
QInputDialog
本身并没有提供直接限制文本输入正则表达式的功能。它主要用于显示一个对话框,获取用户输入的文本、数字或日期等数据,并将其返回给调用者。
如果想要限制用户输入的文本符合特定的正则表达式规则,需要在获取到用户输入的文本后,自行进行正则表达式的验证。
可以在接收到QInputDialog
返回的文本数据后,使用Qt的QRegularExpression
类来进行正则表达式的验证。QRegularExpression
类提供了匹配和搜索文本的方法,可以使用这些方法来判断用户输入的文本是否符合你设定的正则表达式规则。
例如,可以先通过QInputDialog
获取用户输入的文本,然后使用QRegularExpression
类创建一个正则表达式对象,并使用该对象的match()
方法来验证用户输入的文本是否符合规则。如果匹配成功,则表示用户输入的文本符合你的要求;否则,可以提示用户输入无效并采取相应的处理措施。
需要注意的是,这种方法需要在获取到用户输入的文本后进行验证,因此可能会增加一些额外的处理时间和复杂性。
bool ok;
QString text = QInputDialog::getText(this, tr("QInputDialog::getText()"),
tr("User name:"), QLineEdit::Normal,
QDir::home().dirName(), &ok);
if (ok && !text.isEmpty())
{
QRegularExpression reg("[0-9]");
QRegularExpressionMatch match = reg.match(text);
if(match.hasMatch())
ui->lineEdit->setText(text);
else {
QMessageBox::information(this, "", "不满足.");
}
}