0


Qt TableWidget实现筛选和排序

目录


1. 表格初始化:table_init()

  • 1.1. 为表格添加数据

Qt我习惯采用手动拖动增加控件,这里大部分采用的都是ui界面拖动的控件。

1.1.1. 设置行数和列数

  1. //设置行数
  2. ui->tableWidget->setRowCount(int row);
  3. //设置列数
  4. ui->tableWidget->setColumnCount(int colum);

1.1.2. 设置表头

这里是将所有的表头添加到列表里

  1. QStringList *lab = new QStringList;
  2. lab->push_back(QString("时间"));
  3. lab->push_back(QString("频率"));
  4. lab->push_back(QString("速度"));
  5. ui->tableWidget->setHorizontalHeaderLabels(*lab);

1.1.3. 添加表格数据

本文的数据是提前准备好的,为筛选和排序做好数据准备工作。

这里是添加字符串数据:

  1. //row为行号,colum为列号,从0开始
  2. ui->tableWidget->setItem(int row , int colum , new TableWidgetItem("a new string"));

添加整形数据

  1. QTableWidgetItem *item = new QTableWidgetItem;
  2. item->setData(Qt::EditRole , int number);
  3. ui->setItem(int row , int colum , item);

注意:采用非代码,手动在表格中输入数据时,数据默认为字符串数据。

在排序时,直接采用ui->tableWidget->sortByColumn()时,字符串和整形数据的排序是有区别的。数据的格式会影响排序的结果。

数字:2,5,11,27,8

升序:2,5,8,11,27

若为字符串升序:11,2,27,5,8

还有一种添加数据的方式,则是将TableWidgetItem用QCallotor类来管理:

  1. #include <QtWidgets>
  2. class ATableWidgetItem : public QTableWidgetItem
  3. {
  4. public:
  5. virtual bool operator <(const QTableWidgetItem &other)const
  6. {
  7. QCollator collator;
  8. collator.setNumericMode(true);
  9. auto ret=collator.compare(this->text(),other.text());
  10. if(ret<0)
  11. return true;
  12. else
  13. return false;
  14. }
  15. };

设置setNumericMode为true时,采用数字排序。在实例化item时则用ATableWidgetItem来实例化,此时排序这对字符串数据,也能根据数字实现合理的排序。

  1. QString table_col_2[5]={"1024","2048","9600","115200","4096"};
  2. int row=0;
  3. int column=0;
  4. for(int i=0;i<rowC;++i)
  5. {
  6. QTableWidgetItem *item2=new ATableWidgetItem;
  7. item2->setData(Qt::DisplayRole,table_col_2[i]);
  8. ui->tableWidget->setItem(row,column,item2);
  9. }

1.2.1. 其他的一些配置

  1. //设置为只读
  2. ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
  3. //单机选中整行
  4. ui->tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
  5. ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
  6. //表格列宽度自适应
  7. ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);

1.3.1. 针对表头的设置:右键表头弹出菜单Menu

注意:得到右键表头的列数参数index

  1. //设置鼠标右键弹出菜单
  2. ui->tableWidget->horizontalHeader()->setContextMenuPolicy(Qt::CustomContextMenu);
  3. connect(ui->tableWidget->horizontalHeader(),&QWidget::customContextMenuRequested,[=](QPoint pos){
  4. //拿到右键表头那一列的列数
  5. int index=ui->tableWidget->columnAt(pos.rx());
  6. qDebug()<<"选中的列:"<<index<<endl;
  7. QMenu *menu=new QMenu;
  8. QAction *pnew=new QAction("筛选");
  9. menu->addAction(pnew);
  10. QMenu *menu1=menu->addMenu("排序");
  11. QAction *pnew_up=new QAction("升序");
  12. QAction *pnew_down=new QAction("降序");
  13. menu1->addAction(pnew_up);
  14. menu1->addAction(pnew_down);
  15. menu->move(cursor().pos());
  16. menu->show();
  17. )};

样式为这样:右键“时间”表头得到菜单

6866a5cc34cc4044a1dc7c8e469f8e1d.png


2. 表格排序

2.1. 升序

排序需要注意的点在于数据格式,一般包括:int、QString、float、还有一般日期的格式。这里我用QCollator类管理添加的数据后,经过测试后:int , QString ,一般的日期格式:2022/11/26类似这样,都能实现有效的排序。后续的排序就比较容易解决了。

注意:这里采用的是根据某一列的数据来进行排序的

  1. //pnew_up为上面菜单"升序"添加的QAction
  2. //index为上面右键表头得到的表头那一列的列号column
  3. connect(pnew_up,&QAction::triggered,[=](){
  4. ui->tableWidget->sortByColumn(index,Qt::SortOrder::AscendingOrder);
  5. });

2.2. 降序

  1. connect(pnew_down,&QAction::triggered,[=](){
  2. ui->tableWidget->sortByColumn(index,Qt::SortOrder::DescendingOrder);
  3. });

3. 表格筛选

3.1. 存储指定某列的数据

首先要做的事情就是将右键的那一列的数据存储在QStringList列表中,注意是不重复的数据

  1. int rowC=ui->tableWidget->rowCount;
  2. QString Edit_content=new QStringList;
  3. for(int i=0;i<rowC;++i)
  4. {
  5. int flag=1;
  6. QString text=ui->tableWidget->item(i,index)->text();
  7. for(auto it=Edit_content->begin();it!=Edit_content->end();++it)
  8. {
  9. if(text==*it)
  10. {
  11. flag=0;
  12. break;
  13. }
  14. }
  15. if(flag==1)
  16. {
  17. Edit_content->push_back(text);
  18. }
  19. }

3.2. 筛选弹窗的ui和代码部分

3.2.1. UI

用到的控件有GroupBox、ComboBox、LineEdit、PushButton、ListWidge

c83ada47ec5f455989a7ebbc0967975a.png8a23ee6c901e475bb668732865a3d81f.png

3.2.2. ListWidget初始化

目标:为listWidget添加checkBox控件,新增ListWidgetItem,item元素为3.1中存储在QStringList *Edit_content中的不重复的列数据

*注意:将checkBox勾选状态为checked的添加到QStringList isCheck_Box列表中去管理,状态为unChecked的从列表中移除

  1. QListWidgetItem *all=new QListWidgetItem(ui->listWidget);
  2. all_Box=new QCheckBox;
  3. all_Box->setText("全部");
  4. ui->listWidget->addItem(all);
  5. ui->listWidget->setItemWidget(all,all_Box);
  6. for(auto it=Edit_content->begin();it!=Edit_content->end();++it)
  7. {
  8. QListWidgetItem *child=new QListWidgetItem(ui->listWidget);
  9. QCheckBox *child_Box=new QCheckBox;
  10. child_Box->setText(it);
  11. ui->listWidget->addItem(child);
  12. ui->listWidget->setItemWidget(child,child_Box);
  13. if(isCheck_Box->contains(it))
  14. {
  15. child_Box->setCheckState(Qt::CheckState::Checked);
  16. }
  17. connect(all_Box,&QCheckBox::stateChanged,[=](){
  18. if(all_Box->isChecked())
  19. {
  20. child_Box->setCheckState(Qt::CheckState::Checked);
  21. }
  22. else
  23. {
  24. child_Box->setCheckState(Qt::CheckState::Unchecked);
  25. }
  26. });
  27. connect(child_Box,&QCheckBox::stateChanged,[=](){
  28. if(child_Box->isChecked())
  29. {
  30. isCheck_Box->push_back(child_Box->text());
  31. for(auto it=isCheck_Box->begin();it!=isCheck_Box->end();++it)
  32. {
  33. qDebug()<<*it;
  34. }
  35. qDebug()<<endl;
  36. }
  37. else
  38. {
  39. auto it = std::find(isCheck_Box->begin(),isCheck_Box->end(),child_Box->text());
  40. isCheck_Box->erase(it);
  41. for(auto it=isCheck_Box->begin();it!=isCheck_Box->end();++it)
  42. {
  43. qDebug()<<*it;
  44. }
  45. qDebug()<<endl;
  46. all_Box->blockSignals(true);
  47. all_Box->setCheckState(Qt::CheckState::Unchecked);
  48. all_Box->blockSignals(false);
  49. }
  50. });
  51. }

3.2.3. comboBox初始化

目标:添加筛选条件

①:大小写敏感

②:全文匹配

③:正则表达式搜索

  1. QListWidget *comBox_listWidget=new QListWidget;
  2. ui->comboBox->setModel(comBox_listWidget->model());
  3. ui->comboBox->setView(comBox_listWidget);
  4. checkBox1=new QCheckBox(comBox_listWidget);
  5. checkBox1->setText("大小写敏感");
  6. QListWidgetItem *item1=new QListWidgetItem();
  7. comBox_listWidget->addItem(item1);
  8. comBox_listWidget->setItemWidget(item1,checkBox1);
  9. checkBox2=new QCheckBox(comBox_listWidget);
  10. checkBox2->setText("全文匹配");
  11. QListWidgetItem *item2=new QListWidgetItem();
  12. comBox_listWidget->addItem(item2);
  13. comBox_listWidget->setItemWidget(item2,checkBox2);
  14. checkBox3=new QCheckBox(comBox_listWidget);
  15. checkBox3->setText("使用正则表达式");
  16. QListWidgetItem *item3=new QListWidgetItem();
  17. comBox_listWidget->addItem(item3);
  18. comBox_listWidget->setItemWidget(item3,checkBox3);
  19. int length=checkBox3->text().length();
  20. int font_val=ui->comboBox->font().pointSize();
  21. ui->comboBox->view()->setFixedWidth(length*font_val*2);

3.2.4. LineEdit初始化

目标:当LineEdit::textEdited信号产生时,也就是在对行编辑框做出编辑时,以comboBox中勾选的筛选条件为依据,来更新ListWidget中的内容
大小写敏感
int QString::indexOf(const QString &str, int from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
indexOf()为模糊匹配函数,CaseInsensitive为大小写不敏感,CaseSensitive为敏感。没找到匹配的返回-1。全文匹配QString s.length()==ui->LineEdit->text()->length()判断字符串正则搜索

  1. QRegExp rx(text,Qt::CaseInsensitive) ; rx.indexIn(QString s); rx.exactMatch(QString s);

indexIn()函数,判断s和text是否模糊匹配,不匹配返回-1;

exactMatch()函数,返回bool,判断是否全文匹配。

3.2.5. 实现筛选

目标:在点击确认按钮后,根据QStringList *isCheck_Box勾选列表中的内容,显示勾选过的表格内容,隐藏未勾选的内容。

  1. connect(ui->pushButton_ok,&QPushButton::clicked,[=](){
  2. ui->lineEdit->clear();
  3. for(int i=0;i<rowC;++i)
  4. {
  5. ui->tableWidget->setRowHidden(i,true);
  6. }
  7. for(auto it=isCheck_Box->begin();it!=isCheck_Box->end();++it)
  8. {
  9. QList<QTableWidgetItem *> item;
  10. for(int i=0;i<rowC;++i)
  11. {
  12. if(*it==ui->tableWidget->item(i,index)->text())
  13. {
  14. item.append(ui->tableWidget->item(i,index));
  15. }
  16. }
  17. if(!item.isEmpty())
  18. {
  19. for(int i=0;i<item.count();++i)
  20. {
  21. ui->tableWidget->setRowHidden(item.at(i)->row(),false);
  22. }
  23. }
  24. }
  25. ui->groupBox_shaixuan->hide();
  26. });

4. 代码

4.1.mainwindow.h

  1. #ifndef MAINWINDOW_H
  2. #define MAINWINDOW_H
  3. #include <QMainWindow>
  4. #include <QCheckBox>
  5. namespace Ui {
  6. class MainWindow;
  7. }
  8. class MainWindow : public QMainWindow
  9. {
  10. Q_OBJECT
  11. public:
  12. explicit MainWindow(QWidget *parent = 0);
  13. ~MainWindow();
  14. public:
  15. void table_init();
  16. void listWidget_init(const int &x,const int &y);
  17. void lineEdit_init();
  18. void comboBox_init();
  19. void common_if(const QString &it);
  20. void common_else();
  21. void line_init_child();
  22. private:
  23. Ui::MainWindow *ui;
  24. QStringList *Edit_content;
  25. QStringList *isCheck_Box;
  26. QCheckBox *checkBox1;
  27. QCheckBox *checkBox2;
  28. QCheckBox *checkBox3;
  29. QCheckBox *all_Box;
  30. };
  31. #endif // MAINWINDOW_H

4.2. ATableWidgetItem.h

  1. #ifndef ATABLEWIDGETITEM_H
  2. #define ATABLEWIDGETITEM_H
  3. #include <QtWidgets>
  4. class ATableWidgetItem : public QTableWidgetItem
  5. {
  6. public:
  7. virtual bool operator <(const QTableWidgetItem &other)const
  8. {
  9. QCollator collator;
  10. collator.setNumericMode(true);
  11. auto ret=collator.compare(this->text(),other.text());
  12. if(ret<0)
  13. return true;
  14. else
  15. return false;
  16. }
  17. };
  18. #endif // ATABLEWIDGETITEM_H

4.3. mainwindow.cpp

  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. #include "AtableWidgetItem.h"
  4. MainWindow::MainWindow(QWidget *parent) :
  5. QMainWindow(parent),
  6. ui(new Ui::MainWindow)
  7. {
  8. ui->setupUi(this);
  9. table_init();
  10. lineEdit_init();
  11. comboBox_init();
  12. }
  13. MainWindow::~MainWindow()
  14. {
  15. delete ui;
  16. }
  17. void MainWindow::table_init()
  18. {
  19. ui->groupBox_shaixuan->hide();
  20. ui->tableWidget->setRowCount(5);
  21. ui->tableWidget->setColumnCount(3);
  22. QStringList *lab=new QStringList;
  23. lab->push_back(QString("时间"));
  24. lab->push_back(QString("频率"));
  25. lab->push_back(QString("备注"));
  26. ui->tableWidget->setHorizontalHeaderLabels(*lab);
  27. int rowC=ui->tableWidget->rowCount();
  28. QString table_col_1[5]={"2022/11/28","2022/11/08","2001/07/13","2003/10/16","2019/09/01"};
  29. for(int i=0;i<rowC;++i)
  30. {
  31. QTableWidgetItem *item1=new ATableWidgetItem;
  32. item1->setData(Qt::DisplayRole,table_col_1[i]);
  33. ui->tableWidget->setItem(i,0,item1);
  34. }
  35. QString table_col_2[5]={"1024","2048","9600","115200","4096"};
  36. for(int i=0;i<rowC;++i)
  37. {
  38. QTableWidgetItem *item2=new ATableWidgetItem;
  39. item2->setData(Qt::DisplayRole,table_col_2[i]);
  40. ui->tableWidget->setItem(i,1,item2);
  41. }
  42. QString table_col_3[5]={"abc","xZ","AD","Bb","ppd"};
  43. for(int i=0;i<rowC;++i)
  44. {
  45. QTableWidgetItem *item3=new ATableWidgetItem;
  46. item3->setData(Qt::DisplayRole,table_col_3[i]);
  47. ui->tableWidget->setItem(i,2,item3);
  48. }
  49. //设置为只读
  50. ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
  51. //单机选中整行
  52. ui->tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
  53. ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
  54. //表格列宽度自适应
  55. ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
  56. connect(ui->tableWidget,&QTableWidget::clicked,[=](){
  57. ui->groupBox_shaixuan->hide();
  58. });
  59. connect(ui->tableWidget->horizontalHeader(),&QHeaderView::clicked,[=](){
  60. ui->groupBox_shaixuan->hide();
  61. });
  62. //设置鼠标右键弹出菜单
  63. ui->tableWidget->horizontalHeader()->setContextMenuPolicy(Qt::CustomContextMenu);
  64. connect(ui->tableWidget->horizontalHeader(),&QWidget::customContextMenuRequested,[=](QPoint pos){
  65. int index=ui->tableWidget->columnAt(pos.rx());
  66. qDebug()<<"选中的列:"<<index<<endl;
  67. ui->groupBox_shaixuan->hide();
  68. Edit_content=new QStringList;
  69. for(int i=0;i<rowC;++i)
  70. {
  71. int flag=1;
  72. QString text=ui->tableWidget->item(i,index)->text();
  73. for(auto it=Edit_content->begin();it!=Edit_content->end();++it)
  74. {
  75. if(text==*it)
  76. {
  77. flag=0;
  78. break;
  79. }
  80. }
  81. if(flag==1)
  82. {
  83. Edit_content->push_back(text);
  84. }
  85. }
  86. QMenu *menu=new QMenu;
  87. QAction *pnew=new QAction("筛选");
  88. menu->addAction(pnew);
  89. QMenu *menu1=menu->addMenu("排序");
  90. QAction *pnew_up=new QAction("升序");
  91. QAction *pnew_down=new QAction("降序");
  92. menu1->addAction(pnew_up);
  93. menu1->addAction(pnew_down);
  94. menu->move(cursor().pos());
  95. QPoint test_p1=this->mapFromGlobal(cursor().pos());
  96. int x=test_p1.rx();
  97. int y=test_p1.ry();
  98. qDebug()<<x<<","<<y<<endl;
  99. menu->show();
  100. connect(pnew,&QAction::triggered,[=](){
  101. isCheck_Box=new QStringList;
  102. listWidget_init(x,y);
  103. connect(ui->pushButton_ok,&QPushButton::clicked,[=](){
  104. ui->lineEdit->clear();
  105. for(int i=0;i<rowC;++i)
  106. {
  107. ui->tableWidget->setRowHidden(i,true);
  108. }
  109. for(auto it=isCheck_Box->begin();it!=isCheck_Box->end();++it)
  110. {
  111. QList<QTableWidgetItem *> item;
  112. for(int i=0;i<rowC;++i)
  113. {
  114. if(*it==ui->tableWidget->item(i,index)->text())
  115. {
  116. item.append(ui->tableWidget->item(i,index));
  117. }
  118. }
  119. if(!item.isEmpty())
  120. {
  121. for(int i=0;i<item.count();++i)
  122. {
  123. ui->tableWidget->setRowHidden(item.at(i)->row(),false);
  124. }
  125. }
  126. }
  127. ui->groupBox_shaixuan->hide();
  128. });
  129. connect(ui->pushButton_cancel,&QPushButton::clicked,[=](){
  130. ui->groupBox_shaixuan->hide();
  131. });
  132. });
  133. connect(pnew_up,&QAction::triggered,[=](){
  134. ui->tableWidget->sortByColumn(index,Qt::SortOrder::AscendingOrder);
  135. // menu->hide();
  136. });
  137. connect(pnew_down,&QAction::triggered,[=](){
  138. ui->tableWidget->sortByColumn(index,Qt::SortOrder::DescendingOrder);
  139. // menu->hide();
  140. });
  141. });
  142. }
  143. void MainWindow::listWidget_init(const int &x, const int &y)
  144. {
  145. ui->listWidget->clear();
  146. ui->tableWidget->show();
  147. ui->groupBox_shaixuan->move(x,y);
  148. ui->groupBox_shaixuan->show();
  149. common_else();
  150. }
  151. void MainWindow::lineEdit_init()
  152. {
  153. connect(ui->lineEdit,&QLineEdit::textEdited,[=](){
  154. line_init_child();
  155. });
  156. }
  157. void MainWindow::comboBox_init()
  158. {
  159. QListWidget *comBox_listWidget=new QListWidget;
  160. ui->comboBox->setModel(comBox_listWidget->model());
  161. ui->comboBox->setView(comBox_listWidget);
  162. checkBox1=new QCheckBox(comBox_listWidget);
  163. checkBox1->setText("大小写敏感");
  164. QListWidgetItem *item1=new QListWidgetItem();
  165. comBox_listWidget->addItem(item1);
  166. comBox_listWidget->setItemWidget(item1,checkBox1);
  167. checkBox2=new QCheckBox(comBox_listWidget);
  168. checkBox2->setText("全文匹配");
  169. QListWidgetItem *item2=new QListWidgetItem();
  170. comBox_listWidget->addItem(item2);
  171. comBox_listWidget->setItemWidget(item2,checkBox2);
  172. checkBox3=new QCheckBox(comBox_listWidget);
  173. checkBox3->setText("使用正则表达式");
  174. QListWidgetItem *item3=new QListWidgetItem();
  175. comBox_listWidget->addItem(item3);
  176. comBox_listWidget->setItemWidget(item3,checkBox3);
  177. int length=checkBox3->text().length();
  178. int font_val=ui->comboBox->font().pointSize();
  179. ui->comboBox->view()->setFixedWidth(length*font_val*2);
  180. }
  181. void MainWindow::common_if(const QString &it)
  182. {
  183. QListWidgetItem *child=new QListWidgetItem(ui->listWidget);
  184. QCheckBox *child_Box=new QCheckBox;
  185. child_Box->setText(it);
  186. ui->listWidget->addItem(child);
  187. ui->listWidget->setItemWidget(child,child_Box);
  188. if(isCheck_Box->contains(it))
  189. {
  190. child_Box->setCheckState(Qt::CheckState::Checked);
  191. }
  192. connect(all_Box,&QCheckBox::stateChanged,[=](){
  193. if(all_Box->isChecked())
  194. {
  195. child_Box->setCheckState(Qt::CheckState::Checked);
  196. }
  197. else
  198. {
  199. child_Box->setCheckState(Qt::CheckState::Unchecked);
  200. }
  201. });
  202. connect(child_Box,&QCheckBox::stateChanged,[=](){
  203. if(child_Box->isChecked())
  204. {
  205. isCheck_Box->push_back(child_Box->text());
  206. for(auto it=isCheck_Box->begin();it!=isCheck_Box->end();++it)
  207. {
  208. qDebug()<<*it;
  209. }
  210. qDebug()<<endl;
  211. }
  212. else
  213. {
  214. auto it = std::find(isCheck_Box->begin(),isCheck_Box->end(),child_Box->text());
  215. isCheck_Box->erase(it);
  216. for(auto it=isCheck_Box->begin();it!=isCheck_Box->end();++it)
  217. {
  218. qDebug()<<*it;
  219. }
  220. qDebug()<<endl;
  221. all_Box->blockSignals(true);
  222. all_Box->setCheckState(Qt::CheckState::Unchecked);
  223. all_Box->blockSignals(false);
  224. }
  225. });
  226. }
  227. void MainWindow::common_else()
  228. {
  229. QListWidgetItem *all=new QListWidgetItem(ui->listWidget);
  230. all_Box=new QCheckBox;
  231. all_Box->setText("全部");
  232. ui->listWidget->addItem(all);
  233. ui->listWidget->setItemWidget(all,all_Box);
  234. for(auto it=Edit_content->begin();it!=Edit_content->end();++it)
  235. {
  236. common_if(*it);
  237. }
  238. }
  239. void MainWindow::line_init_child()
  240. {
  241. ui->listWidget->clear();
  242. QListWidgetItem *all=new QListWidgetItem;
  243. all_Box=new QCheckBox;
  244. all_Box->setText("全部");
  245. ui->listWidget->addItem(all);
  246. ui->listWidget->setItemWidget(all,all_Box);
  247. int flag=1;
  248. for(auto it=Edit_content->begin();it!=Edit_content->end();++it)
  249. {
  250. QString temp_text=*it;
  251. //大小写敏感
  252. if(checkBox1->isChecked() && !checkBox2->isChecked() && !checkBox3->isChecked())
  253. {
  254. if(temp_text.indexOf(ui->lineEdit->text(),0,Qt::CaseSensitive)!=-1)
  255. {
  256. flag=0;
  257. common_if(*it);
  258. }
  259. }
  260. //全文匹配
  261. else if(!checkBox1->isChecked() && checkBox2->isChecked() && !checkBox3->isChecked())
  262. {
  263. if(temp_text.contains(ui->lineEdit->text(),Qt::CaseInsensitive)&&temp_text.length()==ui->lineEdit->text().length())
  264. {
  265. flag=0;
  266. common_if(*it);
  267. }
  268. else if(ui->lineEdit->text()=="")
  269. {
  270. common_else();
  271. break;
  272. }
  273. }
  274. //正则
  275. else if(!checkBox1->isChecked() && !checkBox2->isChecked() && checkBox3->isChecked())
  276. {
  277. QString text=ui->lineEdit->text();
  278. QRegExp rx(text,Qt::CaseInsensitive);
  279. if(rx.indexIn(*it)!=-1)
  280. {
  281. flag=0;
  282. common_if(*it);
  283. }
  284. }
  285. //大小写敏感+正则
  286. else if(checkBox1->isChecked() && !checkBox2->isChecked() && checkBox3->isChecked())
  287. {
  288. QString text=ui->lineEdit->text();
  289. QRegExp rx(text,Qt::CaseSensitive);
  290. if(rx.indexIn(*it)!=-1)
  291. {
  292. flag=0;
  293. common_if(*it);
  294. }
  295. }
  296. //全文匹配+正则
  297. else if(!checkBox1->isChecked() && checkBox2->isChecked() && checkBox3->isChecked())
  298. {
  299. QString text=ui->lineEdit->text();
  300. QRegExp rx(text,Qt::CaseInsensitive);
  301. if(rx.exactMatch(*it))
  302. {
  303. flag=0;
  304. common_if(*it);
  305. }
  306. else if(ui->lineEdit->text()=="")
  307. {
  308. common_else();
  309. break;
  310. }
  311. }
  312. //大小写敏感+全文匹配+正则
  313. else if(checkBox1->isChecked() && checkBox2->isChecked() && checkBox3->isChecked())
  314. {
  315. QString text=ui->lineEdit->text();
  316. QRegExp rx(text,Qt::CaseSensitive);
  317. if(rx.exactMatch(*it))
  318. {
  319. flag=0;
  320. common_if(*it);
  321. }
  322. else if(ui->lineEdit->text()=="")
  323. {
  324. common_else();
  325. break;
  326. }
  327. }
  328. //大小写敏感+全文匹配
  329. else if(checkBox1->isChecked() && checkBox2->isChecked() && checkBox3->isChecked())
  330. {
  331. if(temp_text.contains(ui->lineEdit->text(),Qt::CaseSensitive)&&temp_text.length()==ui->lineEdit->text().length())
  332. {
  333. flag=0;
  334. common_if(*it);
  335. }
  336. else if(ui->lineEdit->text()=="")
  337. {
  338. common_else();
  339. break;
  340. }
  341. }
  342. else if(!checkBox1->isChecked() && !checkBox2->isChecked() && !checkBox3->isChecked())
  343. {
  344. if(temp_text.indexOf(ui->lineEdit->text(),0,Qt::CaseInsensitive)!=-1)
  345. {
  346. flag=0;
  347. common_if(*it);
  348. }
  349. }
  350. }
  351. if(flag==1)
  352. {
  353. all->setHidden(true);
  354. }
  355. }

4.4. main.cpp

  1. #include "mainwindow.h"
  2. #include <QApplication>
  3. int main(int argc, char *argv[])
  4. {
  5. QApplication a(argc, argv);
  6. MainWindow w;
  7. w.show();
  8. return a.exec();
  9. }

4.5. UI设计

4.6. 效果视频

QTableWidget表格筛选排序

标签: qt

本文转载自: https://blog.csdn.net/m0_60752380/article/details/128017404
版权归原作者 m0_60752380 所有, 如有侵权,请联系我们删除。

“Qt TableWidget实现筛选和排序”的评论:

还没有评论