Text Edit(多行输入框)

QTextEdit 表示多行输入框,也是一个富文本 & markdown 编辑器,能在内容超出范围时自动提供滚动条。

QTextEdit:不仅仅能表示纯文本,还可以表示 htnl 和 markdown

QPlainTextEdit:只能表示纯文本

核心属性
属性说明
markdown支持 Markdown 格式并自动渲染为 HTML。
html支持大部分 HTML 标签(如 imgtable)。
placeHolderText输入框为空时的提示文本。
readOnly是否只读。
undoRedoEnable启用撤销/重做(Ctrl+Z 撤销,Ctrl+Y 重做)。
autoFormatting开启自动格式化。
tabStopWidth缩进占用的空格数。
overwriteMode是否开启覆盖写模式。(光标接下来是否插入或者覆盖?)
acceptRichText是否接收富文本内容 --- html 标签。
verticalScrollBarPolicy垂直滚动条策略:
• Qt::ScrollBarAsNeeded(默认)根据内容自动决定是否需要滚动条
• Qt::ScrollBarAlwaysOff 总是关闭滚动条
• Qt::ScrollBarAlwaysOn 总是显示滚动条
horizontalScrollBarPolicy水平滚动条策略:
• Qt::ScrollBarAsNeeded(默认)根据内容自动决定是否需要滚动条
• Qt::ScrollBarAlwaysOff 总是关闭滚动条
• Qt::ScrollBarAlwaysOn 总是显示滚动条
核心信号
  • textChanged():文本内容改变时触发。

  • selectionChanged():选中范围改变时触发。

  • cursorPositionChanged():光标移动时触发。

  • undoAvailable(bool):可撤销时触发。

  • redoAvailable(bool):可重做时触发。

  • copyAvailable(bool):文本选中/取消选中时触发。

代码示例:获取输入框内容

1.界面:创建一个多行输入框和一个 label

2.槽函数给多⾏输⼊框添加 slot 函数. 处理 textChanged 信号

  • 通过 toPlainText ⽅法获取到内部的⽂本。  
  • 类似的,QTextEdit 还提供了 toMarkdown 和 toHtml。根据需要我们调整不同的获取⽅式。
void Widget::on_textEdit_textChanged()
{// 获取到多行输入框中的内容const QString& text = ui->textEdit->toPlainText();// 和之前的Text()不太一样!ui->label->setText(text);
}

3.效果:输入框内容变化时,label 同步更新。

代码示例:验证信号

1.创建多行输入框

2.给输入框添加以下几个 slot 函数

QTextEdit 中包含了一个 QTextCursor 对象,通过这个对象可以获取到当前光标位置和选中的内容

void Widget::on_textEdit_textChanged()
{qDebug()<<"textChanged: "<<ui->textEdit->toPlainText();
}void Widget::on_textEdit_selectionChanged()
{QTextCursor cursor = ui->textEdit->textCursor();qDebug()<<"selectionChanged: "<<cursor.selectedText();
}void Widget::on_textEdit_cursorPositionChanged()
{QTextCursor cursor = ui->textEdit->textCursor();qDebug()<<"cursorPositionChanged: "<<cursor.position();
}void Widget::on_textEdit_undoAvailable(bool b)
{qDebug()<<"undoAvailable: "<<b;
}void Widget::on_textEdit_redoAvailable(bool b)
{qDebug()<<"redoAvailable: "<<b;
}void Widget::on_textEdit_copyAvailable(bool b)
{qDebug()<<"copyAvailable: "<<b;
}

3.执行程序,观察结果

可以看到:

  1. 编写内容时,textChanged 和 cursorPositionChanged 会触发

  2. 选中一段文本时,cursorPositionChangedselectionChangedcopyAvailable 会触发

  3. 按下 Ctrl + Z 时,textChangedundoAvailableredoAvailablecursorPositionChanged 会触发

  4. 按下 Ctrl + Y 时,textChangedundoAvailableredoAvailablecursorPositionChanged 会触发


Combo Box(组合框/下拉框)

QComboBox 表示下拉框。

核心属性
属性说明
currentText当前选中文本。
currentIndex当前选中下标(从 0 开始,未选中时为 -1)。
editable是否允许编辑(设为 true 时行为类似 QLineEdit)。
iconSize下拉图标大小。(下拉点击的图标(倒三角))
maxCount最大条目数。
核心方法
方法说明
addlitem(const QString&)添加一个条目
currentindex()获取当前条目的下标,从0开始计算;如果当前没有条目被选中,值为-1
currentText()获取当前条目的文本内容
核心信号
  • activated(int):用户选择选项时触发(这时候相当于用户点开下拉框,并且鼠标滑过某个选项,此时还没有确认做出选择)。

  • currentIndexChanged(int)/currentIndexChanged(const QString& text):选项改变时触发(此时用户已经明确的选择一个选项,用户操作或者通过程序操作都会出发这个信号)。

  • editTextChanged(const QString&):可编辑时文本变化触发(editable 为 true 时有效)。

代码示例:麦当劳点餐
  1. 界面:三个下拉框(汉堡、小食、饮料)和一个按钮。

  2. 初始化

    Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
    {ui->setupUi(this);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("雪碧");
    }
  3. 按钮槽函数

    void Widget::on_pushButton_clicked()
    {qDebug()<<ui->comboBox->currentText()<<", "<<ui->comboBox_2->currentText()<<", "<<ui->comboBox_3->currentText();
    }
  4. 执⾏程序, 可以看到, 在点击确定按钮时, 就能获取到当前下拉框中选中的内容:

我们也可以通过ui界面进行编辑:

代码示例:从文件加载下拉框的选项

很多时候下拉框的选项并非是固定的,而是通过读取文件/读取网络获取得到的!(选课的时候,加载出所可选的选项!每年都不同)

1.在界面上创建一个下拉框

2.创建文件 d:/for_test/config.txt,编写选项,每个选项占一行

火灵儿 - 出自《完美世界》。
李慕婉 - 出自《仙逆》。
陆雪琪 - 出自《诛仙》。
焰灵姬 - 出自《天行九歌》。
赤练 - 出自《秦时明月》。
少司命 - 出自《秦时明月》。
仙清儿 - 出自动漫《牧神记》。
灵毓秀 - 出自《牧神记》动画。
云霄 - 出自动漫《师兄啊师兄》。
唐雅 - 出自动漫《斗罗大陆2绝世唐门》。

3.修改 widget.cpp,读取文件

  • 使⽤ ifstream 打开⽂件
  • 使⽤ getline 读取每⼀⾏
  • 使⽤ QString::fromStdString 把 std::string 转成 QString
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 需要读取文件内容,把文件中的每一行读取出来,作为一个 Combobox 的选项// 读写IO --- I: 读(输入) --- 参考点是CPU!!!std::ifstream file("D:/for_test/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();;// 关闭文件是很关键的,否则会造成文件资源泄漏!
}

4.执⾏程序, 可以看到⽂件内容已经被加载到下拉框中:


🎉 Qt 中也提供了 QFile 实现读写⽂件的功能。当然使⽤ C++ 标准库的 std::fstream 也是完全可以的。之所以存在两套,是因为 Qt 诞⽣较早 (1991 年左右),此时 C++ 还没有完成 "标准化" 的工作,C++ 标准库这样的概念⾃然也没有诞⽣。因此 Qt 就⾃⼰打造了⼀套库,实现了字符串,容器,⽂件操作,多线程,⽹络操作,定时器,正则表达式等内容。

(由于 C++ 标准委员会的不作为, ⾄今仍然有些 Qt 提供的功能, 是标准库不具备的)

Spin Box(微调框)

使用 QSpinBox 或者 QDoubleSpinBox 来创建“微调框”,它是带有按钮的输入框,可以用来输入整数/浮点数。通过点击按钮来修改数值大小。 由于 SpinBox 和 QDoubleSpinBox 用法基本相同,就只介绍 SpinBox 的使用了。

Spin 英文原意为“旋转”,此处引申成“微调”。 事实上很多术语在翻译的时候,不一定非要按照原始的翻译来表示,更追求的是“信达雅”。 举个例子,地铁上的 “Priority Seat” 会翻译成 “爱心专座”,而不是 “优先座位”。

核心属性
属性说明
value存储的数值。
singleStep每次调整的“步长”。按下一次按钮数据变化多少。
displayInteger数字的进制。例如 displayInteger 设为 10, 则是按照 10 进制表示。设为 2 进制表示。
minimum最小值
maximum最大值
suffix后缀
prefix前缀
wrapping是否允许换行
frame是否带边框
alignment文字对齐方式
readOnly是否允许修改
buttonSymbol按钮上的图标。
- UpDownArrows 上下箭头形式
- PlusMinus 加减号形式
- NoButtons 没有按钮
accelerated (加速的)按下按钮时是否为快速调整模式。
correctionMode输入有误时如何修正。
- QAbstractSpinBox::CorrectToPreviousValue : 如果用户输入了一个无效的值(例如,在只能显示正整数的SpinBox中输入了负数),那么SpinBox会恢复为上一个有效值。例如,如果SpinBox的初始值是1,用户输入了-1(无效),然后SpinBox会恢复为1。
- QAbstractSpinBox::CorrectToNearestValue : 如果用户输入了一个无效的值,SpinBox会恢复为最接近的有效值。例如,如果SpinBox的初始值是1,用户输入了-1(无效),那么SpinBox会恢复为0。
keyboardTracking是否开启键盘跟踪。
设为 true, 每次在输入框输入一个数字, 都会触发 valueChanged() 和 textChanged() 信号。
设为 false, 只有在最终按下 enter 或 者输入框失去焦点, 才会触发 valueChanged() 和 textChanged() 信号。
核心信号
信号说明
textChanged(QString)微调框的文本发生改变时会触发。参数 QString 带有前缀和后缀。
valueChanged(int)微调框的文本发生改变时会触发。参数 int, 表示当前的数值。
代码示例:调整麦当劳购物车中的份数。

在界面上创建下列内容

  • 三个下拉框:objectName 为 comboBox 到 spinBox_3

  • 三个微调框:objectName 为 spinBox 到 spinBox_3

  • 一个按钮:objectName 为 pushButton

编写代码,修改 widget.cpp, 给下拉框设置初始值。

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 初始化下拉框菜单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("雪碧");// 初始化微调框// 默认一份ui->spinBox->setValue(1);// 针对 QSpinBox 的范围进行约束ui->spinBox->setRange(1, 5);ui->spinBox_2->setValue(1);ui->spinBox_2->setRange(1, 5);ui->spinBox_3->setValue(1);ui->spinBox_3->setRange(1, 5);
}

编写代码,给按钮添加 slot 函数

void Widget::on_pushButton_clicked()
{qDebug() << "当前下单的内容:"<< ui->comboBox->currentText() << ":" << ui->spinBox->value()<< ui->comboBox_2->currentText() << ":" << ui->spinBox_2->value()<< ui->comboBox_3->currentText() << ":" << ui->spinBox_3->value();
}

执行程序, 可以看到当用户选择不同的内容时, 点击按钮就能获取到对应的结果. 同时我们也无法输入一些超出范围的非法值。

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

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

相关文章

JDK、eclipse的安装,配置JDK、Tomcat并使用eclipse创建项目

目录一、JDK的安装1. 安装JDK2. 配置环境变量3. 检查jdk是否已安装二、eclipse的安装1. 解压安装2. 设置字体大小3. 设置拼写提示三、tomcat安装四、创建项目1. 第一次创建一个普通的java项目2. 第一次创建一个java web项目扩展&#xff1a;运行项目报Tomcat端口占用&#xff0…

Iptables 详细使用指南

目录 1. 工作原理​ 2. 核心架构&#xff08;四表五链&#xff09; 2.1 四张表&#xff08;优先级从高到低&#xff09; 2.2 五条内置链&#xff08;数据包流向&#xff09; 3. Iptables规则 3.1 规则的匹配条件与目标动作 常见匹配条件&#xff08;用于筛选数据包&…

Vue 服务端渲染(SSR)详解

Vue SSR是一种在服务端将 Vue 应用渲染成 HTML 字符串&#xff0c;然后直接发送到客户端的技术。相比传统的客户端渲染&#xff0c;Vue SSR 能带来更好的 SEO 性能和更快的首屏加载时间。下面我们从零到一&#xff0c;结合项目源码&#xff0c;详细讲解如何实现一个 Vue SSR 项…

机器翻译:需要了解的数学基础详解

文章目录一、概率论与统计学1.1 基本概念1.2 在机器翻译中的应用二、线性代数2.1 基本概念2.2 在机器翻译中的应用三、微积分3.1 基本概念3.2 在机器翻译中的应用四、信息论4.1 基本概念4.2 在机器翻译中的应用五、数值优化5.1 优化问题形式化5.2 优化算法5.3 正则化技术六、图…

蓝桥杯手算题和杂题简易做法

一、巧用Excel Excel在解决某些数学问题时非常高效&#xff0c;特别是涉及表格计算、简单统计和可视化分析时。 门牌制作 这道题是一道基础题&#xff0c;只需要判断每个数字有几个2&#xff0c;然后在加起来即可&#xff0c;但是还有更简单的方法&#xff0c;先通过编译器&…

5. 缓存-Redis

文章目录前言一、 介绍1. 简介2. 核心特点二、 应用场景1. 应用场景2. 数据类型作用场景三、 性能特性1. 内存2. 高性能数据结构3. 单线程、多路复用四、 异步持久化机制1. RDB&#xff08;Redis Database&#xff09;2. AOF&#xff08;Append-Only File&#xff09;3. 持久化…

如何理解Tomcat、Servlet、Catanalina的关系

目录 背景&#xff1a; 结论&#xff1a; 好文-【拓展阅读】&#xff1a; 象漂亮更新动力&#xff01; 背景&#xff1a; 学习Java的Servlet时&#xff0c;常常说Tomcat是一个容器&#xff0c;我们写ServletA,ServletB,Tomcat容器在启动的时候会读取web.xml或者我们程序中的…

Hive的并行度的优化

对于分布式任务来说&#xff0c;任务执行的并行度十分重要。Hive的底层是MapReduce&#xff0c;所以Hive的并行度优化分为Map端优化和Reduce端优化。(1)、Map端优化Map端的并行度与Map切片数量相关&#xff0c;并行度等于切片数量。一般情况下不用去设置Map端的并行度。以下特殊…

Vue.js 响应接口:深度解析与实践指南

Vue.js 响应接口&#xff1a;深度解析与实践指南 引言 随着前端技术的不断发展&#xff0c;Vue.js 作为一种流行的前端框架&#xff0c;已经成为了众多开发者的首选。Vue.js 的响应式系统是其核心特性之一&#xff0c;它允许开发者轻松实现数据的双向绑定。而响应接口则是Vue.j…

高精度蓝牙定位:技术、应用与未来发展

一、高精度蓝牙定位概述在当今科技飞速发展的时代&#xff0c;定位技术的精度和可靠性变得越来越重要。高精度蓝牙定位作为一种新兴的定位技术&#xff0c;正逐渐崭露头角。蓝牙技术是一种支持设备短距离通信&#xff08;一般10m内&#xff09;的无线电技术&#xff0c;能在包括…

C# 基于halcon的视觉工作流-章29-边缘提取-亚像素

C# 基于halcon的视觉工作流-章29-边缘提取-亚像素 本章目标&#xff1a; 一、1edges_sub_pix&#xff1b; 二、threshold_sub_pix&#xff1b;本实例实现过程与章28基本相同&#xff0c;不同处在于提取的边缘是亚像素&#xff0c;精度较高&#xff0c;本文仅介绍不同之处&#…

如何实现PostgreSQL的高可用性,包括主流的复制方案、负载均衡方法以及故障转移流程?

前言 实现 PostgreSQL 的高可用性&#xff08;High Availability, HA&#xff09;是一个系统工程&#xff0c;需要结合复制技术、连接路由&#xff08;负载均衡&#xff09;、自动故障转移&#xff08;Failover&#xff09;以及监控告警。以下是主流方案和关键流程的详细说明&a…

Apache Ignite 生产级的线程池关闭工具方法揭秘

Apache Ignite 中用于 安全、可靠地关闭线程池&#xff08;ExecutorService&#xff09; 的关键逻辑。我们来一步步深入理解它的设计思想和实现细节。&#x1f9f1; 一、核心方法&#xff1a;U.shutdownNow(...) public static void shutdownNow(Class<?> owner, Nullab…

Unity:GUI笔记(一)——文本、按钮、多选框和单选框、输入框和拖动条、图片绘制和框绘制

写在前面&#xff1a;写本系列(自用)的目的是回顾已经学过的知识、记录新学习的知识或是记录心得理解&#xff0c;方便自己以后快速复习&#xff0c;减少遗忘。主要是唐老师的课程。一、重要参数、文本、按钮GUI相关代码需要写在private void OnGUI()中。该函数每帧执行&#x…

wordpress从wp_nav_menu中获取菜单项

从wp_nav_menu中获取菜单项&#xff0c;然后检查这些菜单项是否对应分类(Category)&#xff0c;并输出这些分类的ID。 以下是完整的代码实现&#xff1a; <?php // 获取指定菜单位置的菜单项 $menu_items wp_get_nav_menu_items(wodepress); // wodepress 是菜单位置的名…

第4章 程序段的反复执行2 while语句P128练习题(题及答案)

&#xff08;&#xff08;1&#xff09;阅读程序#include <bits/stdc.h> using namespace std; //汤永红 int main(){int n,s0;cin >> n;while(n){s s * 10 n % 10;n / 10;}cout << s << endl;return 0; }分别输入&#xff1a;0 1024 1234567890输出…

图解软件系统组成

这是基于 ​​PlantUML​​ 绘制的软件系统组成部分思维导图&#xff0c;聚焦技术路线与文件类型的对应关系&#xff0c;采用分层架构展示核心模块&#xff1a;startmindmap * **软件系统组成部分*** **一、核心技术栈*** 后端技术* 技术路线: Python Web 框架* 文件类型: .py …

【传奇开心果系列】Flet框架实现的多人访问web数据表高并发前后端自定义框架模板

Flet框架实现的多人访问web数据表高并发前后端自定义框架模板一、效果展示截图二、应用场景介绍1. **多用户实时协作**2. **产品管理**3. **数据可视化**三、特色说明1. **实时通信**2. **高性能**3. **用户友好的界面**4. **日志记录**5. **安全性**四、总结五、源码下载地址六…

农业智慧大屏系统 - Flask + Vue实现

下面我将实现一个完整的农业智慧大屏系统&#xff0c;使用Flask作为后端框架&#xff0c;前端使用Vue.js结合ECharts进行数据可视化展示。 设计思路 前端部分&#xff1a; 使用Vue.js构建响应式界面 使用ECharts实现各类农业数据可视化 使用CSS Grid布局实现大屏适配 后端…

Linux中Https配置与私有CA部署指南

Linux中Https配置与私有CA部署指南 一、HTTPS 核心概念特性HTTPHTTPS协议明文传输HTTP SSL/TLS端口80443加密未加密数据加密二、SSL/TLS 握手流程 Client → Server ClientHello&#xff1a;支持哪些版本、支持哪些加密算法&#xff0c;随机生成一组32字节数据 random_c Serve…