qt初入门8:下拉框,输入框模糊查询,提示简单了解 (借助QCompleter)

news2024/9/21 22:44:33

实现一个简单的模糊查询的逻辑,输入框能提示相关项。

主要借助qt的QCompleter 类( Qt 框架中提供的一个用于自动补全和模糊搜索的类),结合一些控件,比如QComboBox和QLineEdit,实现模糊查询的功能。

1:界面准备

1.1:简单demo,准备了一个QComboBox控件和QLineEdit,分别用于模糊查询验证。

	ui->m_cbb_select->setEditable(true);

//QCombobox的基本设置  设置信息
    QStringList str_list;
    str_list<<"我的测试"<<"我的祖国"<<"明天会更好"<<"今天仍需努力"<<"我还没有女朋友"
             <<"我喜欢小孩"<<"我想结婚了"<<"并不想摸鱼"<<"摸鱼是浪费人生"<<"大环境不好"
             <<"如何适应社会"<<"怎么拥有技术栈"<<"普通人啥也不是"<<"abc大小写测试"<<"ABC大小写测试";

    ui->m_cbb_select->addItems(str_list);
    ui->m_cbb_select->setCurrentText(str_list.at(3));

1.2:设置下拉框样式

QString style = QString("QListView {"
                                "font-family: \"Arial\";"
                                "font-size: 20px; "
                                "outline: 0px;}"
                            "QListView::item {"
                                "background-color: lightgray;"
                                "padding: 3px 0x 3px 5px;"
                                "border-width: 0px;}"
                            "QListView::item:selected {"
                                "background-color: blue;"
                                "color: white;}");
//最后发现不设置 样式不生效                    
QStyledItemDelegate* d = new QStyledItemDelegate;//NOTE 必须 否则部分style不生效

ui->m_cbb_select->view()->setItemDelegate(d);
ui->m_cbb_select->setMaxVisibleItems(5);
ui->m_cbb_select->view()->setStyleSheet(style);

2:借助QCompleter 类,设置模糊查询

2.1:构造 QCompleter 对象 (两种方式均可),也是设置了模糊查询的数据源

//直接用QStringList 构造
	QCompleter *comp = new QCompleter(str_list);

//QStringListModel方式也可以
    QStringListModel* model = new QStringListModel();
    model->setStringList(str_list);
    QCompleter *comp = new QCompleter();
    comp->setModel(model);

2.2:可以设置QCompleter的相关属性

	comp->setCaseSensitivity(Qt::CaseInsensitive); //设置不区分大小写
    comp->setCompletionMode(QCompleter::PopupCompletion); //设置自动显示候选下拉框   InlineCompletion可以设置成行内提示一条
//comp->setCompletionMode(QCompleter::InlineCompletion);  //lineEdit行内提示一条数据?
    comp->setFilterMode(Qt::MatchStartsWith); //设置以前缀进行过滤
//    comp->setFilterMode(Qt::MatchEndsWith);  //以后缀进行过滤

//  QCompleter已经默认了按用户输入文本为前缀匹配了  更精确的控制可以用这个来实现
    connect(ui->m_le_select, &QLineEdit::textEdited, [comp](const QString &text){
        if (!text.isEmpty()) {
            comp->setCompletionPrefix(text);  //设置自动完成前缀为用户输入的文本 
            comp->complete();   // 强制重新完成自动完成
        }
    });

2.3:设置QCompleter 帮助提示的样式 (可以设置为下拉列表,下拉table等)

QString comStyle = style + QString("QListView::item:hover {"
                                        "background-color: yellow}");
//方案一 这里参考 可以设置下拉时其他样式 如QTableView
//    QListView* listView = new QListView;
//    listView->setStyleSheet(comStyle);
//    comp->setPopup(listView);

//方案二
	QAbstractItemView *popup = comp->popup();
	//QStyledItemDelegate* d = new QStyledItemDelegate;
    popup->setItemDelegate(d); //发现没有设置时 样式不生效 必须设置
    popup->setStyleSheet(comStyle);

2.4:把QCompleter加入对应的控件中。

ui->m_cbb_select->setCompleter(comp);
ui->m_le_select->setCompleter(comp);

3:其他(行内提示一行效果)

	QCompleter *comp1 = new QCompleter();
    comp1->setModel(model);
    comp1->setCompletionMode(QCompleter::InlineCompletion);
    ui->m_le_select_2->setCompleter(comp1);

4:测试demo

下拉框测试

在这里插入图片描述

QLineEdit测试:

在这里插入图片描述

QLineEdit行内提示测试:
在这里插入图片描述

注:参考网上逻辑,简单练习。

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

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

相关文章

在线实习项目|泰迪智能科技企业级项目学习,暑期大数据人工智能学习

在线实习介绍 实习时间&#xff1a;每个项目周期七周左右 面向对象&#xff1a;大数据、计算机相关专业学生&#xff1b;大三、大四毕业年度学生 在线实习收获 1、获得项目实战技能&#xff0c;积累项目经验 2、获得在线实习证明 项目特点…

能源化工5G防爆终端能给行业带来什么重要作用?

在能源化工领域&#xff0c;5G防爆终端的引入无疑为行业带来了革命性的变革与重要作用。这些集成了先进5G通信技术和防爆设计的高端设备&#xff0c;不仅提升了生产作业的安全性&#xff0c;还极大地增强了运营效率与智能化水平。 高速、低延迟的5G网络为防爆终端提供了前所未有…

安全防御2

实验要求&#xff1a; 实验过程&#xff1a; 7&#xff0c;办公区设备可以通过电信链路和移动链路上网(多对多的NAT&#xff0c;并且需要保留一个公网IP不能用来转换)&#xff1a; 新建电信区&#xff1a; 新建移动区&#xff1a; 将对应接口划归到各自区域&#xff1a; 新建…

Java(二十二)---队列

文章目录 前言1.队列(Queue)的概念2.Queue的使用3.队列的模拟实现4.循环队列5.双端队列6.面试题[1. 用队列实现栈](https://leetcode.cn/problems/implement-stack-using-queues/description/)[2. 用栈实现队列](https://leetcode.cn/problems/implement-queue-using-stacks/de…

VPN以及GRE和MGRE

VPN VPN — 是虚拟专用网络 通俗地说&#xff0c;就是通过虚拟的手段&#xff0c;将两个独立的网络&#xff0c;穿越一个公共网络进行连接&#xff0c;实现点到点专线的效果&#xff08;可以理解为&#xff1a;一个分公司通过公网和总公司建立点到点的专线连接&#xff09; 现…

innovus:如何获取clock net的route_type和clock name

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 clock net的route type分为top trunk和leaf,net_type的设置方式见文章:

【06】LLaMA-Factory微调大模型——微调模型评估

上文【05】LLaMA-Factory微调大模型——初尝微调模型&#xff0c;对LLama-3与Qwen-2进行了指令微调&#xff0c;本文则介绍如何对微调后的模型进行评估分析。 一、部署微调后的LLama-3模型 激活虚拟环境&#xff0c;打开LLaMA-Factory的webui页面 conda activate GLM cd LLa…

汇编实验5

本实验在32位Linux虚拟机中完成&#xff08;点击查看安装教程&#xff09; 实验内容 二进制炸弹实际是由C语言源程序生成的可执行目标代码&#xff0c;主程序可参考bomb.c。运行时&#xff0c;会按次序提示用户输入3个不同的字符串。如果输入的字符串有误&#xff0c;炸弹就会…

结合金融场景的Scipy模块编程

结合金融场景的Scipy模块编程 数据链接&#xff1a;https://pan.baidu.com/s/1VMh8-4IeCUYXB9p3rL45qw 提取码&#xff1a;c6ys import numpy as np import pandas as pd import statsmodels import matplotlib.pyplot as plt from pylab import mpl mpl.rcParams[font.sans-se…

4 C 语言控制流与循环结构的深入解读

目录 1 复杂表达式的计算过程 2 if-else语句 2.1 基本结构及示例 2.2 if-else if 多分支 2.3 嵌套 if-else 2.4 悬空的 else 2.5 注意事项 2.5.1 if 后面不要加分号 2.5.2 省略 else 2.5.3 省略 {} 2.5.4 注意点 3 while 循环 3.1 一般形式 3.2 流程特点 3.3 注…

SaaS的“大模型焦虑”

随着大模型技术的兴起&#xff0c;SaaS行业正面临前所未有的机遇与挑战。本文深入剖析了SaaS厂商在AI化升级过程中的’大模型焦虑’&#xff0c;并探讨了如何通过战略性的AI应用找到自信&#xff0c;实现产品与服务的转型升级&#xff0c;为SaaS行业的AI之路提供了宝贵的思考与…

JVM之运行时数据区(一):程序计数器+本地方法栈

JVM之运行时数据区&#xff08;一&#xff09;&#xff1a;程序计数器本地方法栈 1.运行时数据区概述2.程序计数器作用特点常见问题 3.本地方法接口本地方法本地接口 4.本地方法栈特点 1.运行时数据区概述 Java虚拟机定义了若干种程序运行期间会使用到的运行时数据区其中有一些…

昇思25天学习打卡营第30天 | MindNLP ChatGLM-6B StreamChat

今天是第30天&#xff0c;学习了MindNLP ChatGLM-6B StreamChat。 今天是参加打卡活动的最后一天&#xff0c;经过这些日子的测试&#xff0c;昇思MindSpore效果还是不错的。 ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型&#xff0c;具有62亿参数&#xff0c;基于 …

业务系统核心模块资料访问性能优化实战

随着业务系统的云化转型不断推进&#xff0c;业务量呈现显著增长&#xff0c;对业务系统的性能和资源管理提出了更高要求。在这样的背景下&#xff0c;实现系统资源使用与性能指标的均衡成为保障生产系统高效稳定运行的核心任务。 在性能优化的范畴内&#xff0c;核心业务系统对…

Linux 10:进程信号

信号示例&#xff1a; 用户输入命令,在Shell下启动一个前台进程&#xff1a; 用户按[CtrlC]&#xff0c;这个键盘输入产生一个硬件中断&#xff0c;被OS获取&#xff0c;解释成信号&#xff0c;发送给目标前台进程。前台进程因为收到信号&#xff0c;进而引起进程退出。 注意&…

2048小游戏,h5,纯前端

部分代码 //scorevar scoreSprite game.add.sprite(10, 10);var scoreGraphics game.add.graphics(0, 0);scoreGraphics.lineStyle(5, 0xA1C5C5);scoreGraphics.beginFill(0x308C8C);scoreGraphics.drawRoundedRect(0, 0, 70, 50, 10);scoreGraphics.endFill();scoreSprite.a…

端到端语音识别

端到端语音识别 一.端到端语音识别的动机 1.传统语音识别语言模型训练 2.传统语音识别缺点 流程复杂且繁琐&#xff1a; 传统的语音识别系统涉及的流程非常多且复杂&#xff0c;从数据准备、模型训练到最终的系统集成&#xff0c;每个步骤都需要仔细处理。入门门槛高&#x…

WEB前端07-DOM对象

DOM模型 1.DOM概念 文档对象模型属于BOM的一 部分&#xff0c;用于对BOM中的核心对象document进行操作&#xff0c;它是一种与平台、语言无关的接口&#xff0c;允许程序和脚本动态地访问或更新HTML、XML文档的内容、结构和样式&#xff0c;且提供了一系列的函数和对象来实现…

近几天,北京大学副校长、教务长王博亲自为藏族女孩送上北京大学首封录取通知书!

藏族女孩代吉永措收到了北京大学2024年首封本科录取通知书。她来自青海湟川中学&#xff0c;已被北京大学历史学科强基计划录取&#xff0c;即将就读于北京大学历史学系。北京大学副校长、教务长王博亲自为代吉永措送上了这份录取通知书&#xff0c;并与她亲切交流了未来的学习…

Linux介绍和文件管理

一Linux的起源 1.Unix Dennis Ritchie和Ken Thompson发明了C语言&#xff0c;而后写出了Unix的内核 2.Minix MINIX是一种基于微 内核架构的类UNIX计算机操作系统&#xff0c;由 Andrew S. Tanenbaum发明 3.Linux内核 芬兰赫尔辛基大学的研究生Linus Torvalds基于Gcc、 ba…