博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
QT笔记之QLineEdit自动补全以及控件提升
阅读量:7118 次
发布时间:2019-06-28

本文共 3077 字,大约阅读时间需要 10 分钟。

转载:

转载:

转载:

一、窗口类.h中

用到的头文件

#include <QStandardItemModel>

//自动补全    QStandardItemModel* m_Model ;    QCompleter*  m_completer;
void onEmailChoosed(const QString& email);void onTextChanged(const QString& str);

 

.cpp中

#include <QCompleter>

构造函数中m_Model = new QStandardItemModel(0, 1, this);m_completer = new QCompleter(m_Model, this);    ui.userEdit->setCompleter(m_completer);    connect(m_completer, SIGNAL(activated(const QString&)), this, SLOT(onEmailChoosed(const QString&)));    connect(ui.userEdit, SIGNAL(textChanged(const QString&)), this, SLOT(onTextChanged(const QString&)));
void QT_Test::onEmailChoosed(const QString& email){    ui.userEdit->clear();    // 清除已存在的文本更新内容    ui.userEdit->setText(email);}void QT_Test::onTextChanged(const QString& str){    if (str.contains("@"))   // 如果已经输入了@符号,我们就停止补全了。因为到了这一步,我们再补全意义也不大了。    {        return;    }    QStringList strlist;    strlist << "@163.com" << "@qq.com" << "@gmail.com" << "@hotmail.com" << "@126.com";    m_Model->removeRows(0, m_Model->rowCount());   // 先清楚已经存在的数据,不然的话每次文本变更都会插入数据,最后出现重复数据    for (int i = 0; i < strlist.size(); ++i)    {        m_Model->insertRow(0);        m_Model->setData(m_Model->index(0, 0), str + strlist.at(i));    }}

 

二、Qt自定义密码框,先显示后隐藏

转载:

转载:

  

#ifndef QPASSWORDLINEEDIT_H#define QPASSWORDLINEEDIT_H#include 
class QPasswordLineEdit : public QLineEdit{ Q_OBJECTpublic: //默认输入300毫秒后消失 QPasswordLineEdit(QWidget *parent,int timeout = 300); ~QPasswordLineEdit(); //获取真实的密码 QString getPassword(); //设置显示到隐藏的时间间隔 void setTimeout(int msec);private slots: void slotCursorPositionChanged(int,int); void slotTextEdited(const QString&); //显示隐藏后的密码 void slotDisplayMaskPassword();private: //获取隐藏后的密码,这里为星号 QString getMaskPassword();private: int mTimeout; QString mLineEditText; //到最后一个字符的长度 int mLastCharCount;};#endif // QPASSWORDLINEEDIT_H

 

#include "qpasswordlineedit.h"#include 
#include
QPasswordLineEdit::QPasswordLineEdit(QWidget *parent,int timeout) : QLineEdit(parent){ mTimeout = timeout; mLineEditText = ""; mLastCharCount = 0; connect(this,SIGNAL(cursorPositionChanged(int,int)),this,SLOT(slotCursorPositionChanged(int,int))); connect(this,SIGNAL(textEdited(const QString&)),this,SLOT(slotTextEdited(const QString&)));}QPasswordLineEdit::~QPasswordLineEdit(){}void QPasswordLineEdit::slotCursorPositionChanged(int oldPos,int newPos){ if(oldPos>=-1 && newPos>=0 ) { if(newPos>oldPos) { QTimer::singleShot(mTimeout,this,SLOT(slotDisplayMaskPassword())); } else { this->setCursorPosition(oldPos); } }}void QPasswordLineEdit::slotDisplayMaskPassword(){ this->setText(getMaskPassword());}void QPasswordLineEdit::slotTextEdited(const QString& text){ if(text.count()>mLastCharCount)//输入 { mLineEditText.append(text.right(1)); } else if(text.count()
text().length(); if(count>0) { for(int i=0;i

选中密码编辑框,然后右键,在弹出菜单中选择提升

 

点击提升就完成了,是不是非常简单

 

你可能感兴趣的文章
RMAN冷备份异机还原
查看>>
Atlas系列一:Atlas功能特点FAQ
查看>>
Android开机动画启动流程
查看>>
玩转博客园的5个小技巧
查看>>
对Spring的IoC和DI最生动的解释
查看>>
kettle转换JavaScript获取命令行参数
查看>>
PHP漏洞全解
查看>>
记2014“蓝桥杯全国软件大赛&quot;决赛北京之行
查看>>
让 ASP.NET JS验证和服务端的 双验证 更简单
查看>>
学 shell (1/5)
查看>>
Theano2.1.10-基础知识之循环
查看>>
从Clarifai的估值聊聊深度学习
查看>>
(林雷看来13):功能优先,发展和重建同步,业绩后
查看>>
怎样找到native speaker的感觉
查看>>
关于如何学习
查看>>
用Java来写常见的排序算法
查看>>
C++链接ODBC数据源:VS2013,Access
查看>>
SQL Server 2014里的性能提升
查看>>
上海淘财经网要道歉客户的信
查看>>
oracle insert &字符插入问题
查看>>