【Qt快速入门(六)】- QLineEdit按钮的使用

目录

  • Qt快速入门(六)- QLineEdit按钮的使用
    • QLineEdit按钮的使用
      • QLineEdit的基本用法
        • 1. 创建和设置文本
        • 2. 获取输入文本
        • 3. 清空输入文本
      • 文本处理
        • 1. 选择文本
        • 2. 设置光标位置
        • 3. 撤销和重做
      • 输入验证
        • 1. 输入掩码
        • 2. 校验器
        • 3. 输入限制
      • 样式设置
        • 1. 设置字体和颜色
        • 2. 占位符文本
        • 3. 密码输入
      • 信号与槽机制
        • 1.文本变化信号
        • 2. 编辑完成信号
      • 扩展功能
        • 1. 自动完成
        • 2. 上下文菜单
      • 总结

Qt快速入门(六)- QLineEdit按钮的使用

QLineEdit按钮的使用

QLineEdit是Qt框架中用于文本输入的单行输入控件。它提供了丰富的功能,包括文本输入、文本验证、占位符提示、密码输入等。本文将详细讲解QLineEdit的使用,包括其基本用法、文本处理、输入验证、样式设置、信号与槽机制、扩展功能以及在Qt Designer中的使用。

QLineEdit的基本用法

QLineEdit控件可以通过Qt Designer设计界面,也可以通过代码动态创建和设置。以下是一些常见的用法示例。

1. 创建和设置文本

QLineEdit可以通过构造函数创建,并使用setText方法设置初始文本。

#include <QApplication>
#include <QLineEdit>int main(int argc, char *argv[]) {QApplication app(argc, argv);QLineEdit lineEdit;lineEdit.setText("Hello, World!");lineEdit.show();return app.exec();
}

在这个简单示例中,QLineEdit被创建并设置了初始文本“Hello, World!”。show方法用于显示控件。

2. 获取输入文本

可以使用text方法获取QLineEdit中的文本。

#include <QApplication>
#include <QLineEdit>
#include <QPushButton>
#include <QVBoxLayout>
#include <QWidget>
#include <QMessageBox>int main(int argc, char *argv[]) {QApplication app(argc, argv);QWidget window;QVBoxLayout layout(&window);QLineEdit lineEdit;QPushButton button("Show Text");layout.addWidget(&lineEdit);layout.addWidget(&button);QObject::connect(&button, &QPushButton::clicked, [&lineEdit]() {QMessageBox::information(nullptr, "Text", "You entered: " + lineEdit.text());});window.show();return app.exec();
}

在这个示例中,当按钮被点击时,会弹出一个消息框,显示QLineEdit中的文本。

3. 清空输入文本

可以使用clear方法清空QLineEdit中的文本。

#include <QApplication>
#include <QLineEdit>
#include <QPushButton>
#include <QVBoxLayout>
#include <QWidget>int main(int argc, char *argv[]) {QApplication app(argc, argv);QWidget window;QVBoxLayout layout(&window);QLineEdit lineEdit;QPushButton button("Clear Text");layout.addWidget(&lineEdit);layout.addWidget(&button);QObject::connect(&button, &QPushButton::clicked, [&lineEdit]() {lineEdit.clear();});window.show();return app.exec();
}

在这个示例中,当按钮被点击时,QLineEdit中的文本会被清空。

文本处理

QLineEdit提供了多种方法处理文本输入,包括选择文本、设置光标位置、撤销和重做等。

1. 选择文本

可以使用selectAll方法选择QLineEdit中的所有文本,使用setSelection方法选择特定范围的文本。

#include <QApplication>
#include <QLineEdit>
#include <QPushButton>
#include <QVBoxLayout>
#include <QWidget>int main(int argc, char *argv[]) {QApplication app(argc, argv);QWidget window;QVBoxLayout layout(&window);QLineEdit lineEdit;lineEdit.setText("Hello, World!");QPushButton selectButton("Select All");QPushButton partialSelectButton("Select Partial");layout.addWidget(&lineEdit);layout.addWidget(&selectButton);layout.addWidget(&partialSelectButton);QObject::connect(&selectButton, &QPushButton::clicked, [&lineEdit]() {lineEdit.selectAll();});QObject::connect(&partialSelectButton, &QPushButton::clicked, [&lineEdit]() {lineEdit.setSelection(7, 5);  // Select "World"});window.show();return app.exec();
}

在这个示例中,按钮分别用于选择QLineEdit中的所有文本和部分文本。

2. 设置光标位置

可以使用setCursorPosition方法设置光标位置,使用cursorPosition方法获取当前光标位置。

#include <QApplication>
#include <QLineEdit>
#include <QPushButton>
#include <QVBoxLayout>
#include <QWidget>
#include <QLabel>int main(int argc, char *argv[]) {QApplication app(argc, argv);QWidget window;QVBoxLayout layout(&window);QLineEdit lineEdit;lineEdit.setText("Hello, World!");QPushButton cursorButton("Set Cursor Position");QLabel cursorPositionLabel("Cursor Position: 0");layout.addWidget(&lineEdit);layout.addWidget(&cursorButton);layout.addWidget(&cursorPositionLabel);QObject::connect(&cursorButton, &QPushButton::clicked, [&lineEdit, &cursorPositionLabel]() {lineEdit.setCursorPosition(5);  // Set cursor position after "Hello"cursorPositionLabel.setText("Cursor Position: " + QString::number(lineEdit.cursorPosition()));});window.show();return app.exec();
}

在这个示例中,按钮用于设置光标位置,并显示当前光标位置。

3. 撤销和重做

可以使用undo和redo方法实现文本输入的撤销和重做功能。

#include <QApplication>
#include <QLineEdit>
#include <QPushButton>
#include <QVBoxLayout>
#include <QWidget>int main(int argc, char *argv[]) {QApplication app(argc, argv);QWidget window;QVBoxLayout layout(&window);QLineEdit lineEdit;QPushButton undoButton("Undo");QPushButton redoButton("Redo");layout.addWidget(&lineEdit);layout.addWidget(&undoButton);layout.addWidget(&redoButton);QObject::connect(&undoButton, &QPushButton::clicked, [&lineEdit]() {lineEdit.undo();});QObject::connect(&redoButton, &QPushButton::clicked, [&lineEdit]() {lineEdit.redo();});window.show();return app.exec();
}

在这个示例中,按钮用于撤销和重做文本输入操作。

输入验证

QLineEdit支持多种输入验证方式,包括输入掩码、校验器和输入限制。

1. 输入掩码

可以使用setInputMask方法设置输入掩码,以限制用户输入的格式。

#include <QApplication>
#include <QLineEdit>
#include <QVBoxLayout>
#include <QWidget>int main(int argc, char *argv[]) {QApplication app(argc, argv);QWidget window;QVBoxLayout layout(&window);QLineEdit phoneLineEdit;phoneLineEdit.setInputMask("(999) 999-9999");  // Phone number masklayout.addWidget(&phoneLineEdit);window.show();return app.exec();
}

在这个示例中,QLineEdit被设置为电话号码输入掩码,只允许用户输入指定格式的电话号码。

2. 校验器

可以使用QValidator类或其子类(如QIntValidator、QDoubleValidator和QRegExpValidator)设置输入校验器。

#include <QApplication>
#include <QLineEdit>
#include <QIntValidator>
#include <QVBoxLayout>
#include <QWidget>int main(int argc, char *argv[]) {QApplication app(argc, argv);QWidget window;QVBoxLayout layout(&window);QLineEdit intLineEdit;QIntValidator intValidator(0, 100);  // Only allow integers between 0 and 100intLineEdit.setValidator(&intValidator);layout.addWidget(&intLineEdit);window.show();return app.exec();
}

在这个示例中,QLineEdit被设置为只允许输入0到100之间的整数。

3. 输入限制

可以使用setMaxLength方法限制QLineEdit的最大输入长度,使用setReadOnly方法将QLineEdit设置为只读。

#include <QApplication>
#include <QLineEdit>
#include <QVBoxLayout>
#include <QWidget>int main(int argc, char *argv[]) {QApplication app(argc, argv);QWidget window;QVBoxLayout layout(&window);QLineEdit limitedLineEdit;limitedLineEdit.setMaxLength(10);  // Limit input length to 10 charactersQLineEdit readOnlyLineEdit;readOnlyLineEdit.setText("Read-Only Text");readOnlyLineEdit.setReadOnly(true);  // Set to read-onlylayout.addWidget(&limitedLineEdit);layout.addWidget(&readOnlyLineEdit);window.show();return app.exec();
}

在这个示例中,第一个QLineEdit被限制为最多输入10个字符,第二个QLineEdit被设置为只读。

样式设置

QLineEdit支持丰富的样式设置,包括字体、颜色、背景等。以下是一些常见的样式设置方法。

1. 设置字体和颜色

可以使用setFont方法设置QLineEdit的字体,使用setStyleSheet方法设置颜色和其他样式。

#include <QApplication>
#include <QLineEdit>
#include <QFont>
#include <QVBoxLayout>
#include <QWidget>int main(int argc, char *argv[]) {QApplication app(argc, argv);QWidget window;QVBoxLayout layout(&window);QLineEdit styledLineEdit;QFont font("Arial", 14, QFont::Bold);styledLineEdit.setFont(font);styledLineEdit.setStyleSheet("color: blue; background-color: yellow;");layout.addWidget(&styledLineEdit);window.show();return app.exec();
}

在这个示例中,QLineEdit被设置为Arial字体、14号、加粗,文本颜色为蓝色,背景颜色为黄色。

2. 占位符文本

可以使用setPlaceholderText方法设置QLineEdit的占位符文本,提示用户输入内容。

#include <QApplication>
#include <QLineEdit>
#include <QVBoxLayout>
#include <QWidget>int main(int argc, char *argv[]) {QApplication app(argc, argv);QWidget window;QVBoxLayout layout(&window);QLineEdit placeholderLineEdit;placeholderLineEdit.setPlaceholderText("Enter your name...");layout.addWidget(&placeholderLineEdit);window.show();return app.exec();
}

在这个示例中,QLineEdit被设置为显示占位符文本“Enter your name…”。

3. 密码输入

可以使用setEchoMode方法设置QLineEdit为密码输入模式,以隐藏用户输入的内容。

#include <QApplication>
#include <QLineEdit>
#include <QVBoxLayout>
#include <QWidget>int main(int argc, char *argv[]) {QApplication app(argc, argv);QWidget window;QVBoxLayout layout(&window);QLineEdit passwordLineEdit;passwordLineEdit.setEchoMode(QLineEdit::Password);layout.addWidget(&passwordLineEdit);window.show();return app.exec();
}

在这个示例中,QLineEdit被设置为密码输入模式,用户输入的内容将以星号(*)显示。

信号与槽机制

QLineEdit提供了多种信号,用于处理文本变化、编辑完成等事件。

1.文本变化信号

textChanged和textEdited信号用于处理文本变化事件。

#include <QApplication>
#include <QLineEdit>
#include <QVBoxLayout>
#include <QWidget>
#include <QLabel>int main(int argc, char *argv[]) {QApplication app(argc, argv);QWidget window;QVBoxLayout layout(&window);QLineEdit lineEdit;QLabel textChangedLabel("Text Changed: ");QLabel textEditedLabel("Text Edited: ");layout.addWidget(&lineEdit);layout.addWidget(&textChangedLabel);layout.addWidget(&textEditedLabel);QObject::connect(&lineEdit, &QLineEdit::textChanged, [&textChangedLabel](const QString &text) {textChangedLabel.setText("Text Changed: " + text);});QObject::connect(&lineEdit, &QLineEdit::textEdited, [&textEditedLabel](const QString &text) {textEditedLabel.setText("Text Edited: " + text);});window.show();return app.exec();
}

在这个示例中,textChanged信号在文本变化时触发,textEdited信号在用户编辑文本时触发。

2. 编辑完成信号

editingFinished信号在用户完成编辑并按下回车键或失去焦点时触发。

#include <QApplication>
#include <QLineEdit>
#include <QVBoxLayout>
#include <QWidget>
#include <QLabel>int main(int argc, char *argv[]) {QApplication app(argc, argv);QWidget window;QVBoxLayout layout(&window);QLineEdit lineEdit;QLabel editingFinishedLabel("Editing Finished: ");layout.addWidget(&lineEdit);layout.addWidget(&editingFinishedLabel);QObject::connect(&lineEdit, &QLineEdit::editingFinished, [&lineEdit, &editingFinishedLabel]() {editingFinishedLabel.setText("Editing Finished: " + lineEdit.text());});window.show();return app.exec();
}

在这个示例中,editingFinished信号在用户完成编辑时触发,并显示编辑完成后的文本。

扩展功能

QLineEdit还支持一些扩展功能,如自动完成和上下文菜单。

1. 自动完成

可以使用QCompleter类实现QLineEdit的自动完成功能。

#include <QApplication>
#include <QLineEdit>
#include <QCompleter>
#include <QStringList>
#include <QVBoxLayout>
#include <QWidget>int main(int argc, char *argv[]) {QApplication app(argc, argv);QWidget window;QVBoxLayout layout(&window);QLineEdit autoCompleteLineEdit;QStringList wordList = {"apple", "banana", "cherry", "date", "fig", "grape"};QCompleter completer(wordList);autoCompleteLineEdit.setCompleter(&completer);layout.addWidget(&autoCompleteLineEdit);window.show();return app.exec();
}

在这个示例中,QLineEdit被设置为支持自动完成,用户输入时会显示匹配的单词列表。

2. 上下文菜单

可以通过继承QLineEdit并重写contextMenuEvent方法自定义上下文菜单。

#include <QApplication>
#include <QLineEdit>
#include <QMenu>
#include <QVBoxLayout>
#include <QWidget>class CustomLineEdit : public QLineEdit {Q_OBJECTpublic:CustomLineEdit(QWidget *parent = nullptr) : QLineEdit(parent) {}protected:void contextMenuEvent(QContextMenuEvent *event) override {QMenu *menu = createStandardContextMenu();menu->addAction("Custom Action", this, SLOT(customAction()));menu->exec(event->globalPos());delete menu;}private slots:void customAction() {setText("Custom Action Triggered");}
};int main(int argc, char *argv[]) {QApplication app(argc, argv);QWidget window;QVBoxLayout layout(&window);CustomLineEdit customLineEdit;layout.addWidget(&customLineEdit);window.show();return app.exec();
}#include "main.moc"

在这个示例中,QLineEdit被继承并添加了一个自定义的上下文菜单项。

总结

QLineEdit是Qt框架中功能强大且灵活的单行文本输入控件。通过详细了解QLineEdit的基本用法、文本处理、输入验证、样式设置、信号与槽机制、扩展功能以及在Qt Designer中的使用,开发者可以在实际项目中充分利用QLineEdit的优势,构建出丰富多样的用户界面。无论是简单的文本输入、复杂的格式验证还是自定义样式的高级输入框,QLineEdit都能满足开发者的需求,使得应用程序更加友好和易用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/855569.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络:4网络层

网络层 概述分组转发和路由选择面向连接的虚电路 VC 服务无连接的数据报服务 网际协议IPIPv4划分子网编址方法&#xff1a;子网掩码无分类编址 CIDRIPv4地址与MAC地址地址解析协议ARP IP数据报的发送和转发IPv4数据报的首部格式 静态路由配置因特网的路由选择协议路由信息协议R…

基于PHP+MySQL组合开发的知识付费小程序源码系统 带完整的源代码包+搭建部署教程

系统概述 随着互联网的快速发展&#xff0c;知识付费逐渐成为了一种新型的经济模式。越来越多的用户愿意为高质量的内容付费&#xff0c;而开发者们也在不断探索和创新&#xff0c;以提供更加便捷、高效的知识付费平台。本文将详细介绍一个基于PHPMySQL组合开发的知识付费小程…

Excel表格如何增加下拉选项并填充颜色

在Excel表格中增加下拉选项并填充颜色&#xff0c;可以按照以下步骤进行操作&#xff1a; 一、增加下拉选项 1、 选择目标单元格&#xff1a;首先&#xff0c;你需要选择你想要添加下拉选项的单元格。 2、选定目标单元格后&#xff0c;点击Excel菜单栏上的“数据”选项卡&…

假装热闹的618!商家被榨干,大主播集体哑火……

一年一度的618落下了帷幕&#xff0c;不见平台的战报&#xff0c;也不见品牌的战报&#xff0c;那些恨不得每小时公布一次销售数据的大主播&#xff0c;似乎也哑火了。 在热搜上&#xff0c;除了平台花钱买来假装热闹的话题&#xff0c;就是无数商家的叫苦&#xff0c;而消费者…

vue中的依赖管理

第1部分&#xff1a;引言 1.1 Vue框架简介 Vue.js是一个用于构建用户界面的渐进式框架。它从核心出发&#xff0c;易于学习和集成&#xff0c;同时提供丰富的生态系统支持&#xff0c;包括但不限于Vuex状态管理、Vue Router路由管理等。Vue的核心库只关注视图层&#xff0c;易…

解决Nginx反向代理SSE请求卡顿的问题

最近开发了一个大模型的应用&#xff0c;采用SSE流式响应技术开发。前后端联调的时候&#xff0c;页面内容的响应还是很丝滑的。但使用Nginx部署前端程序后&#xff0c;页面内容的响应就感觉一卡一卡的&#xff0c;好像是每隔两三秒返回一部分内容一样。 这个时候&#xff0c;…

同三维高清大屏多功能一体机简介——高清多能数字矩阵

产品简介 同三维高清多能数字矩阵&#xff08;硬件集软件于一体&#xff09;是依据当前高清视频正广泛应用于各类项目工程的整体形势而专门研发的、特点显著、优势诸多、极具创新性的专业级一体化监控产品。高清多能数字矩阵采用WINDOWS操作系统&#xff0c;基于高性能配置的刀…

第3天:操作符和条件语句

学习目标 掌握Python中的各种操作符理解条件语句的用法学会编写基本的条件判断逻辑 学习内容 1. 操作符 操作符是用于执行各种运算的符号。Python支持多种类型的操作符&#xff0c;包括算术操作符、比较操作符、逻辑操作符和赋值操作符。 算术操作符 &#xff1a;加法-&a…

TikTok带货崛起:从短视频平台到电商平台的转型

近年来&#xff0c;随着社交媒体的迅速发展&#xff0c;TikTok以其独特的短视频形式迅速在全球范围内风靡&#xff0c;不仅吸引了海量用户&#xff0c;还成功地抓住了年轻一代的注意力。随着用户量的激增和内容生态的丰富&#xff0c;TikTok也开始探索新的商业模式&#xff0c;…

【Rust日报】是什么让Rust脱引而出

Rust实现多变量微积分 multicalc-rust发布0.2.0 Salient Features 突出特点 用纯净、安全的Rust书写no-std 友好&#xff0c;零堆分配&#xff0c;no panics完整记录代码示例全面的测试套件&#xff0c;可覆盖完整的代码&#xff0c;包括所有可能的错误情况基于特征的泛型实现&…

ROS机器人虚拟仿真挑战赛持续学习笔记-20240619

cartographer 需要全手工编译……比较麻烦。 如果使用新版ceres-solver&#xff0c;版本2.x&#xff0c;需要修改源码&#xff0c;部分“接口代码”有改动。 稳妥使用ceres-solver-1.13.0&#xff0c;且需要安装abseil-cpp。 验证是否成功&#xff0c;使用roscd或roslaunch…

一步步教你用Python Selenium抓取动态网页任意行数据

引言 在现代网络中&#xff0c;动态网页越来越普遍&#xff0c;这使得数据抓取变得更具挑战性。传统的静态网页抓取方法在处理动态内容时往往力不从心。本文将详细介绍如何使用Python Selenium抓取动态网页中的任意行数据&#xff0c;并结合代理IP技术以提高抓取的成功率和效率…

STM32CubeIDE对STM32F072进行ADC配置及使用

目录 1. 配置2. 时钟3. ADC配置4. 代码补充 1. 配置 引脚配置&#xff1a;PB0 2. 时钟 都是48MHz 3. ADC配置 ADC配置&#xff1a; 开启中断&#xff1a; 4. 代码补充 轮训ADC采样&#xff1a; HAL_ADC_PollForConversion(&hadc,10);ADC采样&#xff1a; HAL_ADC_Start (&a…

LoReFT——大语言模型的表示微调

引言 参数高效的微调或 PeFT 方法寻求通过更新少量权重来适应大型语言模型。然而&#xff0c;大多数现有的可解释性工作已经证明&#xff0c;表示编码了丰富的语义信息&#xff0c;这表明它可能是编辑这些表示的更好、更强大的替代方案。预先训练的大型模型通常经过微调以用于…

一分钟了解NIBSC简介

英国国家生物标准与控制研究所 (NIBSC) 通过以下方式在确保生物药品质量方面发挥着重要的国内和国际作用&#xff1a;制定标准和参考材料、产品控制测试和开展应用研究。 NIBSC向大量组织提供科学建议和专业知识方面发挥着关键作用&#xff0c;包括生物药品制造商、国家监管机…

tedsign vue3 web-端框架中封装一个验证码组件 以及对应node 接口逻辑说明

一个这样的组件 我直接上代码了 <template><t-loading size"small" :loading"loading" show-overlay><div class"container" click"refresh"><div v-if"svg" class"svg" v-html"svg&…

leetcode 二分查找·系统掌握 寻找右区间

题目&#xff1a; 给你一个区间数组 intervals &#xff0c;其中 intervals[i] [starti, endi] &#xff0c;且每个 starti 都 不同 。 区间 i 的 右侧区间 可以记作区间 j &#xff0c;并满足 startj > endi &#xff0c;且 startj 最小化 。注意 i 可能等于 j 。 返回…

解锁LLMs的“思考”能力:Chain-of-Thought(CoT) 技术推动复杂推理的新发展

1.简介 Chain-of-Thought(CoT)是一种改进的Prompt技术&#xff0c;目的在于提升大模型LLMs在复杂推理任务上的表现&#xff0c;如算术推理&#xff08;arithmetic reasoning&#xff09;、常识推理&#xff08;commonsense reasoning&#xff09;、符号推理&#xff08;symbol…

数据结构--顺序表(图文)

顺序表的概念和特点 顺序表是一种线性数据结构&#xff0c;它由一组数据元素构成&#xff0c;这些元素具有相同的特性&#xff0c;并按照一定的顺序排列。在顺序表中&#xff0c;数据元素通常存储在连续的内存空间中&#xff0c;这使得通过索引可以直接访问到表中的任意元素。…

tiaoshixitong

data_interval : 当是ubus 时 重新赋值为 3&#xff1b;当是ws 时 重新赋值为 20&#xff1b; 1. 如何理解data_tik &#xff1f; 在函数can_packet_check_timer 定时can发送函数里面&#xff0c;data_tik 作为倒计时时间&#xff0c;当倒计时间到&#xff0c;则发送。…