Qt中的模糊匹配QCompleter和自动匹配

来源:互联网 发布:java方法的重载 编辑:程序博客网 时间:2024/05/16 12:13

转载自: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);
 }

}


0 0
原创粉丝点击