您的位置:首页 > 编程语言 > Qt开发

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);

 }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  qt 模糊 匹配