Qt中的模糊匹配QCompleter和自动匹配
2014-03-29 16:00
881 查看
转载自:http://hi.baidu.com/781609892/item/2b035e4cdf8dc480833ae19f
模糊匹配
1.利用QCompleter实现
QStringList wordList;
wordList << "alpha" << "omega" << "omicron" << "zeta";
QCompleter *completer = new QCompleter(wordList, this);
completer->setCaseSensitivity(Qt::CaseInsensitive);//·这个属性可设置进行匹配时的大小写敏感性
completer->setCompletionMode(QCompleter::InlineCompletion);//设置匹配时弹出的形式。
//QCompleter::InlineCompletion;
//QCompleter::PopupCompletion;
//QCompleter::UnfilteredPopupCompletion;
ui.lineEdit->setCompleter(completer);
2.自动完成的QLineEdit的匹配
http://blog.sina.com.cn/s/blog_6d1656130100pyvf.html参考博客
//构造函数中
model = new QStringListModel(this);
words = QStringList() << "Biao" << "Bin" << "Huang" << "Hua" << "Hello" << "BinBin" << "Hallo";
model->setStringList(words);
ui->listView->setModel(model);
connect(ui->listView, SIGNAL(clicked(const QModelIndex &)), this, SLOT(completeText(const QModelIndex &)));
connect(ui->lineEdit, SIGNAL(textChanged(const QString &)), this, SLOT(setCompleter(const QString &)));
//实现自动查询
void manualMW::setCompleter( QString serchtext )
{
serchtext = ui->lineEdit->text();
if (serchtext.isEmpty())
{
ui->listView->setModel(model);
}
// 如果完整的完成列表中的某个单词包含输入的文本,则加入要显示的完成列表串中
QStringList sl;
foreach(QString word, dbay_name_list)
{
if (word.contains(serchtext,Qt::CaseInsensitive))
{
sl << word;
}
}
model1->setStringList(sl);
if (model1->rowCount() == 0)
{
return;
}
ui->listView->setModel(model1);
}
void manualMW::keyPressEvent( QKeyEvent *e )
{
if (!ui->listView->isHidden())
{
int key = e->key();
int count = ui->listView->model()->rowCount();
QModelIndex currentIndex = ui->listView->currentIndex();
if (Qt::Key_Down == key) {
// 按向下方向键时,移动光标选中下一个完成列表中的项
int row = currentIndex.row() + 1;
if (row >= count)
{
row = 0;
}
QModelIndex index = ui->listView->model()->index(row, 0);
ui->listView->setCurrentIndex(index);
}
else if (Qt::Key_Up == key)
{
// 按向下方向键时,移动光标选中上一个完成列表中的项
int row = currentIndex.row() - 1;
if (row < 0)
{
row = count - 1;
}
QModelIndex index = ui->listView->model()->index(row, 0);
ui->listView->setCurrentIndex(index);
}
//else if (Qt::Key_Escape == key)
//{
// // 按下Esc键时,初始完成列表
// initListView(words);
//}
else if (Qt::Key_Enter == key || Qt::Key_Return == key)
{
// 按下回车键时,使用完成列表中选中的项
if (currentIndex.isValid())
{
QString selectedtext = ui->listView->currentIndex().data().toString();
QStringList sl;
sl<<selectedtext;
model->setStringList(sl);
ui->listView->setModel(model);
}
}
else
{
// 其他情况,隐藏完成列表,并使用QLineEdit的键盘按下事件
//listView->hide();
//QListView::keyPressEvent(e);
//initListView(words);
}
}
else
{
//QListView::keyPressEvent(e);
}
}
模糊匹配
1.利用QCompleter实现
QStringList wordList;
wordList << "alpha" << "omega" << "omicron" << "zeta";
QCompleter *completer = new QCompleter(wordList, this);
completer->setCaseSensitivity(Qt::CaseInsensitive);//·这个属性可设置进行匹配时的大小写敏感性
completer->setCompletionMode(QCompleter::InlineCompletion);//设置匹配时弹出的形式。
//QCompleter::InlineCompletion;
//QCompleter::PopupCompletion;
//QCompleter::UnfilteredPopupCompletion;
ui.lineEdit->setCompleter(completer);
2.自动完成的QLineEdit的匹配
http://blog.sina.com.cn/s/blog_6d1656130100pyvf.html参考博客
//构造函数中
model = new QStringListModel(this);
words = QStringList() << "Biao" << "Bin" << "Huang" << "Hua" << "Hello" << "BinBin" << "Hallo";
model->setStringList(words);
ui->listView->setModel(model);
connect(ui->listView, SIGNAL(clicked(const QModelIndex &)), this, SLOT(completeText(const QModelIndex &)));
connect(ui->lineEdit, SIGNAL(textChanged(const QString &)), this, SLOT(setCompleter(const QString &)));
//实现自动查询
void manualMW::setCompleter( QString serchtext )
{
serchtext = ui->lineEdit->text();
if (serchtext.isEmpty())
{
ui->listView->setModel(model);
}
// 如果完整的完成列表中的某个单词包含输入的文本,则加入要显示的完成列表串中
QStringList sl;
foreach(QString word, dbay_name_list)
{
if (word.contains(serchtext,Qt::CaseInsensitive))
{
sl << word;
}
}
model1->setStringList(sl);
if (model1->rowCount() == 0)
{
return;
}
ui->listView->setModel(model1);
}
void manualMW::keyPressEvent( QKeyEvent *e )
{
if (!ui->listView->isHidden())
{
int key = e->key();
int count = ui->listView->model()->rowCount();
QModelIndex currentIndex = ui->listView->currentIndex();
if (Qt::Key_Down == key) {
// 按向下方向键时,移动光标选中下一个完成列表中的项
int row = currentIndex.row() + 1;
if (row >= count)
{
row = 0;
}
QModelIndex index = ui->listView->model()->index(row, 0);
ui->listView->setCurrentIndex(index);
}
else if (Qt::Key_Up == key)
{
// 按向下方向键时,移动光标选中上一个完成列表中的项
int row = currentIndex.row() - 1;
if (row < 0)
{
row = count - 1;
}
QModelIndex index = ui->listView->model()->index(row, 0);
ui->listView->setCurrentIndex(index);
}
//else if (Qt::Key_Escape == key)
//{
// // 按下Esc键时,初始完成列表
// initListView(words);
//}
else if (Qt::Key_Enter == key || Qt::Key_Return == key)
{
// 按下回车键时,使用完成列表中选中的项
if (currentIndex.isValid())
{
QString selectedtext = ui->listView->currentIndex().data().toString();
QStringList sl;
sl<<selectedtext;
model->setStringList(sl);
ui->listView->setModel(model);
}
}
else
{
// 其他情况,隐藏完成列表,并使用QLineEdit的键盘按下事件
//listView->hide();
//QListView::keyPressEvent(e);
//initListView(words);
}
}
else
{
//QListView::keyPressEvent(e);
}
}
相关文章推荐
- 转:zTree树控件扩展篇:巧用zTree控件实现文本框输入关键词自动模糊查找zTree树节点实现模糊匹配下拉选择效果
- winform实现combox控件自动匹配查找,模糊查询功能
- c# 实现ComboBox自动模糊匹配
- 原生ajax 实现输入框模糊查询,自动匹配数据库数据
- Qt自动补全(QCompleter或QListView)
- 模糊匹配仿百度自动下拉提示
- c# 实现ComboBox自动模糊匹配
- Qt浅谈之十:自动补全(QCompleter或QListView)
- easyui 模糊匹配解决办法 Firefox不会自动匹配
- JS仿百度自动下拉框模糊匹配提示
- QT:自动补全(QCompleter或QListView)
- 关于Hibernate底层的查询处理(忽略大小写,模糊匹配,自动加载属性)
- 首字母自动匹配与模糊查询
- VC++ combobox模糊匹配,自动匹配
- 模糊匹配及Solr关键词自动提示应用
- easy ui 组合框实现输入框模糊匹配 候选
- JS仿百度搜索自动提示框匹配查询功能
- 自动匹配显示位置的提示框--Auto_Tooltip
- zTree模糊查询,匹配则显示父子节点,否则隐藏
- springmvc4+spring4+hibernate4注解开发,分页查询,表头排序,多条件模糊查询,查询自动补全功能