QT笔记之QLineEdit自动补全以及控件提升

转载:http://www.cnblogs.com/csuftzzk/p/qss_lineedit_completer.html?utm_source=tuicool&utm_medium=referral

转载:http://blog.csdn.net/starcloud_zxt/article/details/5186489

转载:http://blog.sina.com.cn/s/blog_a6fb6cc90101gu7w.html

一、窗口类.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自定义密码框,先显示后隐藏

转载:http://blog.csdn.net/caoshangpa/article/details/50978164

转载:http://www.waitingfy.com/archives/1165

#ifndef QPASSWORDLINEEDIT_H
#define QPASSWORDLINEEDIT_H

#include <QLineEdit>
class QPasswordLineEdit : public QLineEdit
{
    Q_OBJECT
public:
    //默认输入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 <QTimer>
#include <QDebug>
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()<mLastCharCount)//删除
    {
        mLineEditText.remove(mLineEditText.count()-1,1);
    }
    mLastCharCount = mLineEditText.count();
}

QString QPasswordLineEdit::getPassword()
{
    return mLineEditText;
}
void QPasswordLineEdit::setTimeout(int msec)
{
    mTimeout = msec;
}

QString QPasswordLineEdit::getMaskPassword()
{
    QString mask = "";
    int count = this->text().length();
    if(count>0)
    {
        for(int i=0;i<count;i++)
        {
            mask += "*";
        }
    }
    return mask;
}

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

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

时间: 2024-08-02 11:01:32

QT笔记之QLineEdit自动补全以及控件提升的相关文章

【Qt编程】自动补全功能

最近写了一个查单词的类似有道词典的软件,里面就有一个自动补全功能(即当你输入一个字母时,就会出现几个候选项).这个自动补全功能十分常见,百度搜索关键词时就会出现.不过它们这些补全功能都是与你输入的进行首字匹配,有时也会不方便.例如,如果我输入一个"好",如果是首字匹配的话会出现下图: 如果是句中匹配的话,则是这种情况: 你可以根据自己的要求进行选择哪一种模式. Qt中自带QCompleter类来实现上面的自动补全功能,读者可以在Qt自带的demo中很容易的学会该类的使用.下面我要讲的是

QT Creator 代码自动补全

QT Creator 代码自动补全 用QT Creater编程,如果没有自动补全是很痛苦的事情,于是便查阅了QT的文档,发现CTRL+SPACE是自 动补全的快捷键;但是在 Creater里使用居然没有效果,估计是输入法切换的冲突(CTRL+SPACE是我中英文输入的默认快捷 键)于是寻求解决方法,在QT Creater->Tools->Options... 里找到environment->Keyboard,发现 TextEditor.CompleteThis命令,其快捷键是Ctrl+S

VA自动补全QT

发现用了一下,VA不能把QT的东西进行代码自动补全.于是要动下小手脚. 1.在Windows系统环境变量下增加 QTDIR = 你QT的安装目录. 2启动VS->工具->选项->项目和解决方案->VC++目录: 可执行文件下增加:$(QTDIR)\bin 包含文件下增加:$(QTDIR)\include;$(QTDIR)\src 引用文件下增加:$(QTDIR)\lib 库文件下增加:$(QTDIR)\lib 源文件下增加 : $(QTDIR)\src 确定,保存.重启VS后 VA

上课笔记_使用DWR实现自动补全 类似百度搜索框的自动显示效果

使用DWR实现自动补全 自动补全:是指用户在文本框中输入前几个字母或汉字的时候,自动在存放数据的文件或数据库中将所有以这些字母或汉字开头的数据提示给用户供用户选择 在日常上网过程中,我们经常使用搜索引擎,当我们输入想要检索的关键字时,搜索引擎会提示我们相关的关键字 训练要点: 掌握使用DWR框架开发Ajax程序 使用MyEclipse 10.0 + MySql5.0 新建数据库:可以手动随便新建一个测试用的 DROP TABLE IF EXISTS `books`; CREATE TABLE `

【嗜血GO笔记】如何在goclipse 中配置代码自动补全。

代码总也不补全,用起来很不爽,但是liteide 的补全却很舒服,看了下 ,发现其实代码提示主要靠的就是gocode.exe这个文件 注意不是godoc.exe哈,有个小伙伴错误设成了godoc.exe半天他也没找到错误在哪. 我们看一下 如何在goeclipse 里面实现代码提示 首先要说明,其实goclipse 已经包含了一个gocode.exe,但是我只想把liteide的所有功能都迁移至goclipse 中, 所以,我选择的是直接借助liteide完成 用eclipse 纯是个人的一个小

Framework7新版学习笔记之 自动补全输入框(AutoComplete)

一:自动补全输入框 我们可以定义一种具有自动补全功能的输入框,预先设定一些可选值作为自动补全内容.当用户输入可选值的部分内容时,就会在下面自动列出匹配的选项,点击即可自动填充对应的选项. 二:定义自动补全输入框 <div class="item-input-wrap"> <input id="autocomplete-dropdown" type="text" placeholder="提示文本"> &

VIM的自动补全

自动补全可以很好的提高输入的效率: 触发自动补全的方法总结: 可供弹出式菜单的使用的命令: 其它再补充:

Linux Vim中自动补全Python插件:Pydiction

Pydiction 可以是我们使用Tab键自动补全Python代码在Vim,是一款非常不错的插件. Pydiction不需要安装,所有没有任何依赖包问题,Pydiction主要包含三个文件. python_pydiction.vim  -- Vim plugin that autocompletes Python code. complete-dict         -- Dictionary file of Python keywords, modules, etc. pydiction.p

Ubuntu 16.04.2 LTS 安装python vim自动补全工具pydiction

Pydiction 可以是我们使用Tab键自动补全Python代码在Vim,是一款非常不错的插件. 下载Pydiction mkdir ~/.vim mkidr ~/.vim/tools cd ~/.vim/tools #可以先下载好放到Ubuntu系统中 git clone https://github.com/rkulla/pydiction.git 配置Pydiction #- UNIX/LINUX/OSX: Put python_pydiction.vim in ~/.vim/after