前言

在公司工作过程中,我多次遇到一个文本框经常要输入一大串信息,每次输入容易出错且速度很慢。于是我想到了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实现文本框自动记忆、补全和下拉选项填写相关推荐

  1. java select 下拉选项框option定位_java select 下拉选项框opt

    java select 下拉选项框opt [2021-02-05 09:44:01]  简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace( ...

  2. android文本框自动补全,[Android]AutoCompleteTextView自动补全文本框

    当我们在做项目的时候,往往有着这样的需求:(1)在登陆的时候,在输入的账号的过程中弹出补全账号的提示(2)在搜索的时候,在输入搜索词的过程中弹出补全搜索词的提示,就像: 而这时,AutoComplet ...

  3. php文本框自动补全,PHP自动补全表单的两种方法

    效果图: 第一种:从数据库中检索之后补全 第二种:邮箱等纯前端的补全 先说第二种,使用开源的插件,所以相对简单. github上面的项目 completer. https://github.com/f ...

  4. input输入框禁止自动补全和下拉提示

    input 输入框在输入后浏览器会记录用户输入的值,在下次输入的时候会将记录的值提示在输入框的下面,当输入框是密码的时候,这样可以看见上次输入的密码,这样用户体验不好,input标签有个属性可以禁止这 ...

  5. 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 ...

  6. layui怎么给下拉框赋值_layui给select下拉框赋值

    转: layui给select下拉框赋值 //重新渲染表单函数 function renderForm() { layui.use('form', function() { var form = la ...

  7. python qt5 增加文本框_PyQt5 文本输入框自动补全QLineEdit的实现示例

    一.QCompleter类 自动补全会用到的一个类 主要代码 def init_lineedit(self): # 增加自动补全 self.completer = QCompleter(items_l ...

  8. Elasticsearch 分布式搜索引擎 -- 自动补全(拼音分词器、自定义分词器、自动补全查询、实现搜索框自动补全)

    文章目录 1. 自动补全 1.1 拼音分词器 1.2.1 自定义分词器 1.2.2 小结 1.2 自动补全 1.3 实现酒店搜索框自动补全 1.3.1 修改酒店映射结构 1.3.2 修改HotelDo ...

  9. 纯js实现搜索框自动补全

    纯js实现搜索框自动补全 开发语言:HTML+CSS+JS 编辑器:VSCode 构建思路:建立两个div,一个用于输入和搜索,一个用于展示,用于展示的初始状态为隐藏的.后面当有键盘输入事件时就显示, ...

最新文章

  1. 树莓派保卫战--防止SSH暴力破解
  2. Cisco学习笔记 CCNP-EIGRP
  3. C#数组和集合专题2(Array)
  4. Java并发包提供了哪些并发工具类?
  5. Microsoft Office 2010组件介绍
  6. Android pad 刷成苹果,利用安卓手机运行checkra1n越狱你的iPhone/iPad教程,支持12.3-13.5-13.7-14.3-14.4系统...
  7. 解决kali无法定位软件包
  8. C. Chocolate Bunny
  9. 更改tkinter的OptionMenu背景颜色和下拉菜单宽度
  10. P3088 [USACO13NOV]CROWDED COWS S
  11. python神经网络预测股票_用神经网络预测股票市场
  12. 普通相片打印纸如何长时间保存
  13. php 拼音首字母大写字母,获取汉字拼音首字母大写
  14. python计算最大回撤_12最大回撤数据分析
  15. jquery用ajax提交表单
  16. 使用Excel下载数据库里的数据
  17. 3000套3d打印模型素材
  18. joomla创建模板
  19. 高效的JSON转换工具
  20. 5.2 综合案例-继电器控制

热门文章

  1. 从零开始的单片机学习(九)
  2. 人工智能大数据,公开的海量数据集下载,ImageNet数据集下载,数据挖掘机器学习数据集下载
  3. Fluentd学习笔记
  4. 用于少样本故障诊断的半监督元学习网络(有SE模块)
  5. PLC中获取输入信号上升沿或下降沿的具体方法示例
  6. 荷兰 转专业 计算机,关于荷兰留学转专业的那些事
  7. linux默认网关的设置
  8. 画一个奥利奥(python+opencv)
  9. uniapp 项目实践
  10. C语言学习笔记《带你学C带你飞》P21-P40