QlineEdit 自动补全

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

显示密码

显示密码时,利用lineedit-password-character属性更改密文显示字符内容。

QLineEdit[echoMode="2"] {
    lineedit-password-character: 35; /*35,这是一个ASCII码值,在ASCII码中对应字符为‘#’*/
}

自动补全

通过不断修改QCompleter的模型QStandardItemModel实现自动补全。

m_model = new QStandardItemModel(0, 1, this);
m_completer = new QCompleter(m_model, this);
ui.lineEdit->setCompleter(m_completer);
 
//将信号activated()连接到槽onEmailChoosed()。当用户用鼠标选择了某一项之后就把选中的项更新到文本框中,补全完成。
connect(m_completer, SIGNAL(activated(const QString&)), this, SLOT(onEmailChoosed(const QString&)));

//信号textChanged()连接到onTextChanged()用于更新Model中的数据。
connect(ui.lineEdit, SIGNAL(textChanged(const QString&)), this, SLOT(onTextChanged(const QString&)));
void ThemeRoller::onEmailChoosed(const QString& email)
{
    ui.lineEdit->clear();    // 清除已存在的文本更新内容
    ui.lineEdit->setText(email);
}
 
void ThemeRoller::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));
    }
}

猜你喜欢

转载自blog.csdn.net/u011370855/article/details/89451018
今日推荐