setupUi..._linelist qt">
当前位置:   article > 正文

Qt之模糊搜索(QCompleter的使用)_linelist qt

linelist qt

文中控件有:QLineEdit测试,QComboBox测试,QTableWidget测试,QTreeWidget测试

话不多说,直接上代码

  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. QStringList lineList;
  4. MainWindow::MainWindow(QWidget *parent) :
  5. QMainWindow(parent),
  6. ui(new Ui::MainWindow)
  7. {
  8. ui->setupUi(this);
  9. for(int i = 0;i < 4;i++){
  10. for(int j = 0;j < 4;j++){/* item不为空实验效果更直观 */
  11. ui->tableWidget->setItem(i,j,new QTableWidgetItem(""));
  12. }
  13. }
  14. int topCount = ui->treeWidget->topLevelItemCount();
  15. if(topCount <= 0){
  16. qDebug() << "current tree item 0";
  17. }
  18. for (int i = 0; i < topCount; i++) {/* QTreeWidgetItem默认不可编辑,设置为可编辑 */
  19. QTreeWidgetItem *item = ui->treeWidget->topLevelItem(i);
  20. for(int j = 0;j < item->childCount();j++){
  21. item->child(j)->setFlags(item->flags()|Qt::ItemIsEditable);
  22. }
  23. }
  24. lineList << "2020-1-1" << "2019-2-3" << "1080-3-4" << "998-999-1";
  25. /* 新建一个公用的completer */
  26. completer = new QCompleter(lineList, this);
  27. /* CaseInsensitive不区分大小写/CaseSensitive区分大小写 */
  28. completer->setCaseSensitivity(Qt::CaseInsensitive);
  29. /* PopupCompletion符合值弹出一个窗口
  30. * InlineCompletion符合值会直接内嵌到文本输入框中
  31. * UnfilteredPopupCompletion所有的筛选条件都列出,符合条件的在最前
  32. */
  33. completer->setCompletionMode(QCompleter::PopupCompletion);
  34. /* 最大显示符合条件的个数 */
  35. completer->setMaxVisibleItems(10);
  36. // /* 补全路径 */
  37. // QFileSystemModel *model = new QFileSystemModel;
  38. // model->setRootPath(QDir::currentPath());
  39. // completer->setModel(model);
  40. // /* 日期,时间,ip,等等一大堆 */
  41. QLineEditCompleterInit();
  42. QComboxBoxCompleterInit();
  43. }
  44. MainWindow::~MainWindow()
  45. {
  46. delete ui;
  47. }
  48. /* QLineEdit测试 */
  49. void MainWindow::QLineEditCompleterInit()
  50. {
  51. ui->lineEdit->setCompleter(completer);
  52. }
  53. /* 关联此信号槽,编辑结束,收到回车键或者光标变换,lineEdit自带的信号与槽 */
  54. void MainWindow::on_lineEdit_editingFinished()
  55. {
  56. /* 动态添加completer数据 */
  57. QCompleter *completer = ui->lineEdit->completer();
  58. if(!ui->lineEdit->text().isEmpty()){
  59. lineList << ui->lineEdit->text();
  60. completer->setModel(new QStringListModel(lineList, this));
  61. }
  62. }
  63. /* QComboBox测试 */
  64. void MainWindow::QComboxBoxCompleterInit()
  65. {
  66. ui->comboBox->setEditable(true);
  67. ui->comboBox->setCompleter(completer);
  68. }
  69. /* QTableWidget测试 QTableWidget自带的信号与槽 */
  70. void MainWindow::on_tableWidget_currentItemChanged(QTableWidgetItem *current, QTableWidgetItem *previous)
  71. {
  72. int row = 0,column = 0;
  73. QString text;
  74. QWidget *pWidget;
  75. if(current != nullptr){
  76. row = current->row();
  77. column = current->column();
  78. /* 获取需要编辑的item的当前文本 */
  79. text = ui->tableWidget->item(row,column)->text();
  80. QLineEdit *myLineEdit=new QLineEdit;
  81. myLineEdit->setCompleter(completer);
  82. myLineEdit->setText(text);
  83. /* 将编辑框设置为单元格的显示小部件,编辑框不需要delete,小部件被remove时会自动回收 */
  84. ui->tableWidget->setCellWidget(row,column,myLineEdit);
  85. }
  86. if(previous != nullptr){
  87. row = previous->row();
  88. column = previous->column();
  89. /* 获取当前文本内容 */
  90. pWidget = ui->tableWidget->cellWidget(row,column);
  91. text = static_cast<QLineEdit*>(pWidget)->text();
  92. /* 移除小部件 */
  93. ui->tableWidget->removeCellWidget(row,column);
  94. /* 将输入内容设置到item中 */
  95. ui->tableWidget->setItem(row,column,new QTableWidgetItem(text));
  96. }
  97. }
  98. /* QTreeWidget测试 QTreeWidget自带的信号与槽 */
  99. void MainWindow::on_treeWidget_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous)
  100. {
  101. Q_UNUSED(current);
  102. /* 目的:移除小部件QLineEdit */
  103. QString text;
  104. if(previous != nullptr){ /* 上一个item不为空 */
  105. if( previous->parent() == nullptr)/* 上一个item不是顶层节点 */
  106. return;
  107. QLineEdit * curLine = static_cast<QLineEdit *>(ui->treeWidget->itemWidget(previous,priColumn));
  108. if(curLine != nullptr){
  109. /* 获取小部件内容 */
  110. text = curLine->text();
  111. /* 移除小部件 */
  112. ui->treeWidget->removeItemWidget(previous,priColumn);
  113. /* 将输入的内容设置到item*/
  114. previous->setText(priColumn,text);
  115. }
  116. }
  117. }
  118. void MainWindow::on_treeWidget_itemDoubleClicked(QTreeWidgetItem *item, int column)
  119. {
  120. if(item->parent() != nullptr){
  121. /* 用于设置小部件,因为itemChanged获取不到子节点的当前列 */
  122. priColumn = column;
  123. QLineEdit *myLineEdit=new QLineEdit;
  124. myLineEdit->setCompleter(completer);
  125. myLineEdit->setText(item->text(column));
  126. /* 将需要编辑的设置小部件QLineEdit */
  127. ui->treeWidget->setItemWidget(item,column,myLineEdit);
  128. }
  129. }

其中下载:https://download.csdn.net/download/qq_41399894/12260465

其实还有很多小控件可以做,

而且你们还可以将QCompleter的筛选条件从文件中导入,可以从数据库中搜索

下载:https://download.csdn.net/download/qq_41399894/12260458

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/764715
推荐阅读
相关标签
  

闽ICP备14008679号