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

Qt控件:输入控件

输入控件

  • 1. 下拉列表框 QComboBox
    • 1.1 创建 ComboBox
    • 1.2 常用属性和方法
    • 1.3 信号与槽连接
    • 1.4 注意事项
  • 2. 编辑框 QLineEdit
    • 2.1 创建和基本设置
    • 2.2 常用属性和方法
    • 2.3 示例
    • 2.4 注意事项

1. 下拉列表框 QComboBox

在Qt中,QComboBox(下拉列表框)是一种常用的选择控件,允许用户从预定义的选项列表中选择一个值,也可设置为可编辑模式让用户输入自定义内容。

  • 功能:提供下拉式的选项列表,节省界面空间。
  • 模式
    • 只读模式(默认):用户只能从列表中选择。
    • 可编辑模式:用户可输入自定义内容。
  • 信号:选项变化时发出信号,支持索引和文本两种方式捕获变化。

1.1 创建 ComboBox

方法1:在Qt Designer中添加
方法2:在代码中创建

#include <QComboBox>// 在窗口构造函数中创建
QComboBox *comboBox = new QComboBox(this);
comboBox->addItem("选项1");  // 添加单个选项
comboBox->addItems({"选项2", "选项3", "选项4"});  // 添加多个选项// 设置当前选中项
comboBox->setCurrentIndex(1);  // 选中第二个选项(索引从0开始)
comboBox->setCurrentText("选项3");  // 选中文本为"选项3"的项

1.2 常用属性和方法

属性:

属性说明
currentIndex当前选中项的索引(-1表示无选中项)
currentText当前选中项的文本
editable是否可编辑(默认 false
maxCount最大选项数(默认 32767
maxVisibleItems下拉列表一次最多显示的项数
insertPolicy可编辑模式下的插入策略(如 QComboBox::InsertAtTop

方法:

// 添加选项
void addItem(const QString &text, const QVariant &userData = QVariant());
void addItems(const QStringList &texts);// 插入和删除选项
void insertItem(int index, const QString &text);
void removeItem(int index);
void clear();  // 清空所有选项// 获取选项信息
QString itemText(int index) const;
QVariant itemData(int index) const;  // 获取用户数据(见下文)
int count() const;  // 选项总数// 设置和获取当前项
int currentIndex() const;
QString currentText() const;
QVariant currentData() const;
void setCurrentIndex(int index);
void setCurrentText(const QString &text);

可编辑模式:设置 setEditable(true) 后,用户可输入自定义内容

comboBox->setEditable(true);// 设置插入策略
comboBox->setInsertPolicy(QComboBox::InsertAtTop);  // 新输入的内容添加到顶部
comboBox->setInsertPolicy(QComboBox::InsertAlphabetically);  // 按字母顺序插入

用户数据(User Data):每个选项可关联一个 QVariant 类型的用户数据,用于存储额外信息(如ID、对象指针等)

// 添加选项并关联用户数据
comboBox->addItem("北京", 1001);  // 关联城市ID
comboBox->addItem("上海", 1002);// 获取用户数据
int cityId = comboBox->itemData(comboBox->currentIndex()).toInt();

1.3 信号与槽连接

QComboBox提供多种信号,常用的有:

// 选项索引变化时发出(包括程序设置和用户选择)
void currentIndexChanged(int index);
void currentIndexChanged(const QString &text);// 可编辑模式下,文本被编辑时发出
void editTextChanged(const QString &text);// 下拉列表弹出/收起时发出
void activated(int index);
void activated(const QString &text);

示例:连接信号与槽

// 方式1:使用索引
connect(comboBox, QOverload<int>::of(&QComboBox::currentIndexChanged),[=](int index) {qDebug() << "选中项索引:" << index;qDebug() << "选中项文本:" << comboBox->itemText(index);
});// 方式2:使用文本
connect(comboBox, &QComboBox::currentTextChanged,[=](const QString &text) {qDebug() << "当前文本:" << text;
});// 方式3:在槽函数中处理
class MyClass : public QObject {Q_OBJECT
public slots:void onComboBoxChanged(int index);
};connect(comboBox, QOverload<int>::of(&QComboBox::currentIndexChanged),this, &MyClass::onComboBoxChanged);

1.4 注意事项

  • 索引从0开始:第一个选项的索引是0。
  • 性能考虑:大量选项(如超过1000个)时,建议使用 QListView 作为下拉视图。
  • 用户数据类型:存储复杂类型(如自定义对象)时,需使用 Q_DECLARE_METATYPE 注册类型。

在这里插入图片描述

2. 编辑框 QLineEdit

在Qt中,QLineEdit 是用于单行文本输入的控件,支持文本验证、密码模式、占位符提示等功能。

  • 功能:提供单行文本输入框,支持键盘输入、文本选择、复制粘贴等操作。
  • 常用场景:用户名/密码输入、搜索框、配置参数输入等。
  • 信号:文本变化、编辑完成等事件会发出相应信号。

2.1 创建和基本设置

方法1:在Qt Designer中添加

  1. 在Qt Designer的控件面板中找到 QLineEdit
  2. 拖到界面上,在"属性编辑器"中设置 textplaceholderTextmaxLength 等属性。

方法2:在代码中创建

#include <QLineEdit>
// 在窗口构造函数中创建
QLineEdit *lineEdit = new QLineEdit(this);
lineEdit->setText("初始文本");  // 设置初始文本
lineEdit->setPlaceholderText("请输入文本...");  // 设置占位符(输入框为空时显示)
lineEdit->setMaxLength(50);  // 设置最大输入长度
lineEdit->setReadOnly(false);  // 设置是否只读

2.2 常用属性和方法

文本操作:

// 设置和获取文本
void setText(const QString &text);
QString text() const;// 追加和插入文本
void append(const QString &text);
void insert(const QString &newText);// 清空文本
void clear();// 选中部分文本
void setSelection(int start, int length);
void selectAll();

外观和行为:

// 设置对齐方式
void setAlignment(Qt::Alignment flag);  // 如 Qt::AlignCenter// 设置字体
void setFont(const QFont &font);// 设置输入掩码(限制输入格式)
void setInputMask(const QString &inputMask);  // 如 "9999-99-99" 限制日期格式// 设置回声模式(用于密码输入)
void setEchoMode(QLineEdit::EchoMode mode);  // 如 QLineEdit::Password

验证器:

// 设置文本验证器(限制输入内容)
void setValidator(const QValidator *validator);// 示例:只允许输入整数
QIntValidator *validator = new QIntValidator(0, 100, this);  // 范围0-100
lineEdit->setValidator(validator);// 示例:只允许输入正则表达式匹配的内容
QRegExpValidator *regexValidator = new QRegExpValidator(QRegExp("[A-Za-z0-9]+"), this);
lineEdit->setValidator(regexValidator);

信号与槽连接:
QLineEdit提供多种信号,常用的有:

// 文本变化时发出(用户输入或代码设置)
void textChanged(const QString &text);// 编辑完成时发出(按下Enter或失去焦点)
void editingFinished();// 光标位置变化时发出
void cursorPositionChanged(int oldPos, int newPos);// 选中的文本变化时发出
void selectionChanged();// 按下Return/Enter键时发出
void returnPressed();

示例:连接信号与槽:

// 方式1:文本变化时触发
connect(lineEdit, &QLineEdit::textChanged, [=](const QString &text) {qDebug() << "当前文本:" << text;
});// 方式2:编辑完成时触发
connect(lineEdit, &QLineEdit::editingFinished, [=]() {qDebug() << "编辑完成,当前文本:" << lineEdit->text();
});// 方式3:在槽函数中处理
class MyClass : public QObject {Q_OBJECT
public slots:void onTextChanged(const QString &text);
};connect(lineEdit, &QLineEdit::textChanged, this, &MyClass::onTextChanged);

密码模式:
通过 setEchoMode() 设置密码模式:

// 设置为密码模式
lineEdit->setEchoMode(QLineEdit::Password);  // 显示星号 (*)// 可选的密码模式
lineEdit->setEchoMode(QLineEdit::PasswordEchoOnEdit);  // 编辑时显示明文,之后显示星号
lineEdit->setEchoMode(QLineEdit::Normal);  // 正常显示(默认)

输入掩码:
使用 setInputMask() 限制输入格式:

// 示例1:电话号码(+1 123 456 7890)
lineEdit->setInputMask("+9 999 999 9999");// 示例2:IP地址
lineEdit->setInputMask("000.000.000.000;_");  // 用下划线 (_) 作为空白字符// 示例3:日期(YYYY-MM-DD)
lineEdit->setInputMask("9999-99-99");

2.3 示例

#include <QLineEdit>
#include <QVBoxLayout>
#include <QWidget>
#include <QLabel>
#include <QIntValidator>class MyWidget : public QWidget {Q_OBJECT
public:MyWidget(QWidget *parent = nullptr) : QWidget(parent) {QVBoxLayout *layout = new QVBoxLayout(this);// 普通文本输入QLabel *label1 = new QLabel("用户名:", this);QLineEdit *usernameEdit = new QLineEdit(this);usernameEdit->setPlaceholderText("请输入用户名");// 密码输入QLabel *label2 = new QLabel("密码:", this);QLineEdit *passwordEdit = new QLineEdit(this);passwordEdit->setEchoMode(QLineEdit::Password);passwordEdit->setPlaceholderText("请输入密码");// 数值输入QLabel *label3 = new QLabel("年龄:", this);QLineEdit *ageEdit = new QLineEdit(this);ageEdit->setValidator(new QIntValidator(0, 150, this));  // 限制0-150ageEdit->setPlaceholderText("请输入年龄");// 带输入掩码的输入QLabel *label4 = new QLabel("日期:", this);QLineEdit *dateEdit = new QLineEdit(this);dateEdit->setInputMask("9999-99-99");dateEdit->setPlaceholderText("YYYY-MM-DD");// 添加到布局layout->addWidget(label1);layout->addWidget(usernameEdit);layout->addWidget(label2);layout->addWidget(passwordEdit);layout->addWidget(label3);layout->addWidget(ageEdit);layout->addWidget(label4);layout->addWidget(dateEdit);layout->addStretch();// 连接信号connect(usernameEdit, &QLineEdit::textChanged, this, &MyWidget::onTextChanged);connect(passwordEdit, &QLineEdit::editingFinished, this, &MyWidget::onPasswordFinished);}private slots:void onTextChanged(const QString &text) {qDebug() << "用户名变化:" << text;}void onPasswordFinished() {qDebug() << "密码输入完成";}
};

2.4 注意事项

  • 多行文本:若需要多行文本输入,应使用 QTextEditQPlainTextEdit
  • 验证器与输入掩码:两者可同时使用,但验证器优先级更高。
  • 性能考虑:在大量文本输入场景下,频繁触发 textChanged 信号可能影响性能,可考虑使用 editingFinished 信号。

相关文章:

  • 地下水监测的施工与安装
  • 人工智能时代:从“知识容器”到“知识地图”的认知革命
  • 华为模拟器练习简单的拓扑图(2台三层交换机和8台pc)
  • 【知识图谱】数据处理与数据存储
  • 用对称化与chaining技术bound经验过程上确界的期望(Guntuboyina理论统计学笔记)
  • Three.js搭建小米SU7三维汽车实战(1)搭建开发环境
  • vue3定于组件名字的几种方法
  • 浙江大学python程序设计(陈春晖、翁恺、季江民)习题答案-第十章
  • QT ui控件setEnabled(false) 作用
  • 亚马逊IEN新规避坑指南:两大申报盲区与合规策略解析
  • YOLOv5:调用官方权重进行检测
  • Appium 的 enableMultiWindows 参数
  • 甲骨文云服务器适合做网站吗
  • MCP Server Tool 开发学习文档
  • Veeam Backup 13 beta install
  • 跨境支付风控失效?用代理 IP 构建「地域 - 设备 - 行为」三维防护网
  • ​​Resin-3.1.12-01 安装教程:详细步骤与配置指南(Linux环境)
  • 遥控器处理器与光纤通信技术解析
  • 树 Part 8
  • 如何借助iPaaS集成平台做好API 错误码规范化
  • 做药品的电商网站有哪些/百度网站首页网址
  • 可以在自己的电脑上做网站吗/我赢网客服系统
  • 做网站最主要/全网营销骗局揭秘
  • 中企动力建站怎么样/百度官方认证
  • 免费空间建网站/站长统计推荐
  • 网站建设备案优化之看/网页设计案例