当前位置: 首页 > news >正文

QT-常用控件(四)-输入类

目录

QLineEdit(单行输入框)

QTextEdit(多行输入框)

QCombo Box(下拉框)

QSpin Box(微调框)


QLineEdit(单行输入框)

代码目的:让用户输入个人信息,并进行获取。

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 初始化第一个输入框,用来输入姓名ui->lineEdit_name->setPlaceholderText("请输入姓名");ui->lineEdit_name->setClearButtonEnabled(true);// 初始化第二个输入框,用来输入密码ui->lineEdit_password->setPlaceholderText("请输入密码");ui->lineEdit_password->setClearButtonEnabled(true);// 把显示模式设置成显示密码的模式.ui->lineEdit_password->setEchoMode(QLineEdit::Password);// 初始化第三个输入框ui->lineEdit_phone->setPlaceholderText("请输入手机号码");ui->lineEdit_phone->setClearButtonEnabled(true);// 手机号码是有固定格式的. 此处的 0 代表 "数字"ui->lineEdit_phone->setInputMask("000-0000-0000");
}Widget::~Widget()
{delete ui;
}void Widget::on_pushButton_submit_clicked()
{QString gender = ui->radioButton_male->isChecked() ? "男" : "女";qDebug() << "姓名: " << ui->lineEdit_name->text()<< "密码: " << ui->lineEdit_password->text()<< "性别: " << gender<< "电话: " << ui->lineEdit_phone->text();
}

ui->lineEdit_phone->setInputMask大的限制能力比较弱,如果不满足需求可以考虑使用正则表达式。

使用样例1:

//创建正则表达式

QRegExp regExp("^1\\d{10}$");

用户输入内容符合要求则可提交,否则eable=flase;

^n:表示以n开始

\\d{10}:表示必须重复10次出现数字,\d表示数字,\\进行转义,{10}表示进行重复10次操作;

$:结尾;

//创建验证器(验证正则表达式是否正确)

ui->lineEdit->setValidator(new QRegExpValidator(regExp));

我们期望的是内容发生改变时,时刻进行验证,看用户输入的内容是否符合要求,符合要求按钮可用,否则不可用。

因此我们需要用到行文本框的textChanged或者textEdited属性。

void Widget::on_lineEdit_textEdited(const QString &text)
{int pos=0;QString content=text;//调用验证器,并验证,返回值是枚举类型(通过/不通过)//验证通过if(ui->lineEdit->validator()->validate(content,pos)==QValidator::Acceptable){ui->pushButton->setEnabled((true));}else{ui->pushButton->setEnabled((false));}
}

在调用是需要注意传参,第一个参数是要验证的字符串第二个参数是错误出现时错误位置(int)

在函数传参是参数是const的,而调用传参是非const,因此不能直接调用待检测字符串,可以进行拷贝,我们也可以自定义进行重写,也可以调用QT封装的QRegExpValidator;

正则表达式的运用

仔细观察发现:

当数字串长度不满足11位时,按钮不可用,等于11时可用,且不可以超过11位。

使用样例2:验证两次输入密码一致:

使用样例3:复选框实现密码显示与隐式的切换

#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->lineEdit->setEchoMode(QLineEdit::Password);
}Widget::~Widget()
{delete ui;
}void Widget::on_checkBox_toggled(bool checked)
{if(checked){ui->lineEdit->setEchoMode(QLineEdit::Normal);}else{ui->lineEdit->setEchoMode(QLineEdit::Password);}
}

QTextEdit(多行输入框)

QTextEdit 支持多行文本输入,还可进行富文本编辑,适用于备注、文章内容等大量文本输入场景

核心功能与信号

  • 多行输入:天然支持多行文本,用户可自由换行输入。
  • 富文本支持:能设置文本的字体、颜色、字号等样式,例如 ui->textEdit->setFontWeight(QFont::Bold) 可将文本设为粗体。
  • 文本变化信号textChanged 信号在文本内容发生改变时触发,可用于实时监控文本变化,如自动保存草稿等功能。
  • 内容获取与设置:通过 toPlainText() 获取纯文本内容,setPlainText(const QString &text) 设置纯文本内容;若需富文本操作,可使用 toHtml() 和 setHtml(const QString &html)

核心信号:

QCombo Box(下拉框)

核心方法

  • 添加选项addItem(const QString &text) 可添加单个选项,addItems(const QStringList &texts) 可批量添加多个选项。
  • 插入选项insertItem(int index, const QString &text) 能在指定索引位置插入选项。
  • 设置当前选项setCurrentIndex(int index) 或 setCurrentText(const QString &text) 可设置当前选中的选项。
  • 获取当前选项currentIndex() 获取当前选项的索引,currentText() 获取当前选项的文本内容。

核心信号:

样例:

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <fstream>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 需要读取文件内容,把文件中的每一行读取出来,作为一个 ComboBox 的选项std::ifstream file("C:/Users/1/Desktop/config.txt");if (!file.is_open()) {qDebug() << "文件打开失败";return;}// 按行来读取文本内容.// getline 函数完成.std::string line;while (std::getline(file, line)) {// 取到的每一行内容,设置到下拉框中.ui->comboBox->addItem(QString::fromStdString(line));}file.close();
}Widget::~Widget()
{delete ui;
}

QSpin Box(微调框)

QSpinBox 用于输入整数,带有上下调节按钮,方便用户微调数值;若需输入浮点数,可使用 QDoubleSpinBox。

属性

  • 数值范围setRange(int min, int max) 设置数值的最小和最大值,限制输入范围。
  • 步长setSingleStep(int step) 设置点击上下按钮时数值的变化步长。
  • 初始值setValue(int val) 设置初始显示的数值。

信号

  • 数值变化信号valueChanged(int i) 在数值发生改变时触发,可用于联动其他控件或执行相应逻辑。

样例:选餐

// 初始化下拉菜单
ui->comboBox->addItem("麦辣鸡腿堡");
ui->comboBox->addItem("巨无霸");
ui->comboBox->addItem("培根蔬粹双层牛堡");ui->comboBox_2->addItem("中薯条");
ui->comboBox_2->addItem("麦乐鸡块");
ui->comboBox_2->addItem("麦辣鸡翅");ui->comboBox_3->addItem("雪碧");
ui->comboBox_3->addItem("可乐");// 针对 QSpinBox 的范围进行设置
ui->spinBox->setRange(1, 5);
ui->spinBox_2->setRange(1, 5);
ui->spinBox_3->setRange(1, 5);ui->spinBox->setValue(1);
ui->spinBox_2->setValue(1);
ui->spinBox_3->setValue(1);
http://www.dtcms.com/a/481771.html

相关文章:

  • newstar2025 web week1week2题解(少一道)
  • 【C++】vector常用接口的使用
  • ES6 面试题及详细答案 80题 (62-80)-- 类与继承
  • 宁波高质量品牌网站设计厂家网络完全公司排名
  • 网站源码在线提取东莞市网站公司
  • C++中substr()函数详解
  • 乐迪信息:煤矿堆煤隐患难排查?AI摄像机实时监控与预警
  • Deep Dive into LLMs like ChatGPT 学习笔记
  • AI-大模型接入
  • 4.Windows Server 磁盘管理(1)
  • 后端三层架构
  • PyTorch 实现多模型集成与 VGG 在 CIFAR-10 上的应用
  • 网站建设所需费用明细长沙优化官网收费标准
  • NVMe高速传输之摆脱XDMA设计52: 上板资源占用率分析
  • 青岛建网站的公司有哪些wordpress能用手机管理吗
  • 2.游戏中的Buff系统设计
  • 解锁网络性能优化利器HTTP/2C
  • 基于 React + Go + PostgreSQL + Redis 的管理系统开发框架
  • Flink Checkpoint 设计理念深度解析(附源码)
  • 从 TF-IDF 到 Word2Vec:让推荐系统更懂语义
  • 01-ELK安装ES,ES-head
  • OpenCV4-直方图与傅里叶变换-项目实战-信用卡数字识别
  • 医院排班挂号系统小程序
  • 河北建设厅网站打不开是什么原因国际新闻直播
  • C++设计模式_行为型模式_命令模式Command
  • Blender自动化展UV插件 UV Factory 4.3 v1 – Powerful Modular Uv Tools
  • 网络与通信安全课程复习汇总2——信息保密
  • 密码学安全:CIA三元组与三大核心技术
  • 建网站怎么做本地的营销网站建设
  • 短剧分销系统技术拆解:渠道推广码生成、订单归因与实时分账系统实现