qt通过QComboBox实现文本框自动记忆、补全和下拉选项填写
前言
在公司工作过程中,我多次遇到一个文本框经常要输入一大串信息,每次输入容易出错且速度很慢。于是我想到了QQ登录界面的功能。
QQ登录界面的基本功能为:当点击下拉框,会出现曾经登录过的有效的账号密码,且排在前面的为最新登录过的账号,当输入曾经登录过的账号的前几位时,会自动补全。我觉得这种输入就非常的人性化,于是打算常用的输入框都使用这种思路。
在qt中,使用QComboBox去替代QLineEdit,将QComboBox改为可编辑,这样既拥有了输入框又有下拉框。QComboBox还会在输入信息的时候进行自动补全。自动记忆功能我们通过读写配置文件来实现。
实现思路
通过QStringList来存储名字信息,下拉列表中默认显示QStringList中第一个名字,当选择QStringList中已存的一个名字时,(在触发事件触发后)会将这个名字放到QStringList的开头(这样QStringList中记录的顺序其实就是使用过的顺序了),当在文本框中输入新的名字时,会将新名字添加到QStringList开头。
大致思路我觉得不是很难,直接上代码
.h文件(这里面只是定义了几个全局变量)
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QSettings>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void on_pushButton_clicked();private:Ui::MainWindow *ui;QSettings *m_IniFile;QStringList m_usernameList;
};
#endif // MAINWINDOW_H
.cpp文件
#include "mainwindow.h"
#include "ui_mainwindow.h"#include <QCompleter>
#include <QSettings>
#include <QDebug>
#include <QTextCodec>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);QString exePath=QCoreApplication::applicationDirPath();//配置文件为可执行程序所在的目录下的local.iniQString iniFile=exePath+"/local.ini";//m_IniFile为全局变量QSettings *m_IniFile;m_IniFile = new QSettings(iniFile, QSettings::IniFormat,this);//文件中的编码要设置和这里对应,比如我都设置成UTF-8m_IniFile->setIniCodec(QTextCodec::codecForName("UTF-8"));//通过Value函数将节下相对应的键值读取出来QString username =m_IniFile->value("client/username").toString();m_usernameList=username.split("|");ui->comboBox->setEditable(true);ui->comboBox->setCurrentText(m_usernameList.at(0));ui->comboBox->addItems(m_usernameList);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_pushButton_clicked()
{//我希望的是每进行一次触发事件后,这次文本框中的内容会设置成在下次打开程序时的默认值//只有触发事件后才进行这样的操作QString currentContent=ui->comboBox->currentText();if(m_usernameList.contains(currentContent)){m_usernameList.removeAt(ui->comboBox->currentIndex());}m_usernameList.push_front(currentContent);m_usernameList.removeAll("");QString username;for (int i=0;i<m_usernameList.size();i++ ) {if(i==m_usernameList.size()-1){username+=m_usernameList.at(i);}else{username+=m_usernameList.at(i)+"|";}}m_IniFile->setValue("client/username",username);qDebug()<<ui->comboBox->currentText();
}
如果下拉列表中存储的信息过多,我们想像浏览器那样,输入部分信息进行匹配,则只需要在构造函数中使用QCompleter即可,但注意使用这个的时候会导致下拉列表的自动补全无法使用
//将名字列表放入QCompleter中QCompleter *completer = new QCompleter(m_usernameList);ui->comboBox->setCompleter(completer);
实现效果是这样:
区别自动补全和智能提示,下面是自动补全的效果:
自动补全会补全最近的一个
完成这些之后,只需要对下拉框进行美化,即可达到qq登录界面的那种效果
链接:QComboBox样式设置
其实还有一个下拉选项后面的那个删除功能没有实现,,默认QComboBox是没有删除的那个叉号的,需要自定义QComboBox类,然后增加下拉列表的删除功能,就很复杂,我这里没用到。就不进行实现了。
码字不易,如果这篇博客对你有帮助,麻烦点赞收藏,非常感谢!有不对的地方,可以评论区交流。
qt通过QComboBox实现文本框自动记忆、补全和下拉选项填写相关推荐
- java select 下拉选项框option定位_java select 下拉选项框opt
java select 下拉选项框opt [2021-02-05 09:44:01] 简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace( ...
- android文本框自动补全,[Android]AutoCompleteTextView自动补全文本框
当我们在做项目的时候,往往有着这样的需求:(1)在登陆的时候,在输入的账号的过程中弹出补全账号的提示(2)在搜索的时候,在输入搜索词的过程中弹出补全搜索词的提示,就像: 而这时,AutoComplet ...
- php文本框自动补全,PHP自动补全表单的两种方法
效果图: 第一种:从数据库中检索之后补全 第二种:邮箱等纯前端的补全 先说第二种,使用开源的插件,所以相对简单. github上面的项目 completer. https://github.com/f ...
- input输入框禁止自动补全和下拉提示
input 输入框在输入后浏览器会记录用户输入的值,在下次输入的时候会将记录的值提示在输入框的下面,当输入框是密码的时候,这样可以看见上次输入的密码,这样用户体验不好,input标签有个属性可以禁止这 ...
- wxpython列表框_wxpython中列表框(ListBox类)、复选列表框(CheckListBox)、下拉选项(Choice)、进度条(Gauge)、滑块(Slider)使用实例源码分享...
#coding=utf-8 import wx import time class MyFrame(wx.Frame): def __init__(self): wx.Frame.__init__(s ...
- layui怎么给下拉框赋值_layui给select下拉框赋值
转: layui给select下拉框赋值 //重新渲染表单函数 function renderForm() { layui.use('form', function() { var form = la ...
- python qt5 增加文本框_PyQt5 文本输入框自动补全QLineEdit的实现示例
一.QCompleter类 自动补全会用到的一个类 主要代码 def init_lineedit(self): # 增加自动补全 self.completer = QCompleter(items_l ...
- Elasticsearch 分布式搜索引擎 -- 自动补全(拼音分词器、自定义分词器、自动补全查询、实现搜索框自动补全)
文章目录 1. 自动补全 1.1 拼音分词器 1.2.1 自定义分词器 1.2.2 小结 1.2 自动补全 1.3 实现酒店搜索框自动补全 1.3.1 修改酒店映射结构 1.3.2 修改HotelDo ...
- 纯js实现搜索框自动补全
纯js实现搜索框自动补全 开发语言:HTML+CSS+JS 编辑器:VSCode 构建思路:建立两个div,一个用于输入和搜索,一个用于展示,用于展示的初始状态为隐藏的.后面当有键盘输入事件时就显示, ...
最新文章
- 树莓派保卫战--防止SSH暴力破解
- Cisco学习笔记 CCNP-EIGRP
- C#数组和集合专题2(Array)
- Java并发包提供了哪些并发工具类?
- Microsoft Office 2010组件介绍
- Android pad 刷成苹果,利用安卓手机运行checkra1n越狱你的iPhone/iPad教程,支持12.3-13.5-13.7-14.3-14.4系统...
- 解决kali无法定位软件包
- C. Chocolate Bunny
- 更改tkinter的OptionMenu背景颜色和下拉菜单宽度
- P3088 [USACO13NOV]CROWDED COWS S
- python神经网络预测股票_用神经网络预测股票市场
- 普通相片打印纸如何长时间保存
- php 拼音首字母大写字母,获取汉字拼音首字母大写
- python计算最大回撤_12最大回撤数据分析
- jquery用ajax提交表单
- 使用Excel下载数据库里的数据
- 3000套3d打印模型素材
- joomla创建模板
- 高效的JSON转换工具
- 5.2 综合案例-继电器控制