ui->tableWidget->horizontalHeader()->setSortIndicatorShown(true); //显示排序图标(默认为上下箭头) ui->tableWidget->horizontalHeader()->setSortIndicator(0,Qt::SortOrder::AscendingOrder); //设置第0列 升序排序 二.QTableWidget 修改排序图标的展现方式(修改图标、位置) 通过设置样式表的方法来改变图标: ui->tableWidget->horizontalHeader()->setStyleSheet("QHeaderView::up-arrow { subcontrol-position: center right; padding-right: 8px;" "image: url(:/images/sort_up.png);}" "QHeaderView::down-arrow { subcontrol-position: center right; padding-right: 8px;" "image: url(:/images/sort_down.png);}"); 三.QTableWidget 表头点击排序 排序通如下函数实现,参考qt助手: void QTableWidget::sortItems(int column, Qt::SortOrder order = Qt::AscendingOrder) Sorts all the rows in the table widget based on column and order. 连接表头的信号:QHeaderView *horizontalHeader() const 即可,代码实现如下: connect(ui->tableWidget->horizontalHeader(),SIGNAL(sectionClicked(int )),this, SLOT(sortTableByCol(int))); void MainWindow::sortTableByCol(int col) if(sortUpDown) //sortUpDown为自定义的一个bool变量,表示升序还是降序 ui->tableWidget->sortItems(col, Qt::AscendingOrder); sortUpDown=false; ui->tableWidget->sortItems(col, Qt::DescendingOrder); sortUpDown=true; 四.QTableWidget 字符排序和数字排序 1.如果使用setText()函数对 QTableWidget 的item进行数据设定的话,那么排序方式为字符串排序。 2.如果使用setdata()函数设置数据源的话,那么排序方式可以为数字排序。 参考如下代码: int index = 1; for(int i=0; i<ui->tableWidget->rowCount(); i++) ui->tableWidget->item(i,0)->setData(Qt::DisplayRole,index); //index 本质为数字,所以调用sortItems()排序函数时,会进行数字排序 ui->tableWidget->item(i,1)->setText(QString::number(index)); //index转换为字符串送入item,所以调用sortItems()排序函数时,会进行字符串排序 index += 3; 重写QAbstractItemModel类的sort()函数。 1、QTableWidget显示表格数据,为了达到一些自定义操作,经常需要自己写数据模型类和表头类,如下代码: m_model = new MyDataModel(this); m_headerView = new MyHeaderView(Qt::Horizontal, ui->tblvKits); ui->tblvKits->setModel(m_model); ui->t 今日,由于工作需要,要实现在QTableView中点击表头进行排序的功能,但QTableView中并未提供此功能,经过苦苦的网络搜索也为发现可用的代码。最后经过跟踪QTableWidget的排序功能实现,总算实现了此功能。 此文章将使用QT源码中自带的例子做为基础: (file source: examples/widgets/tutorials/modelview/4_headers/main Qt之 QTableWidget 列排序 1、常规的QTableWidget的排序接口 void QTableView::setSortingEnabled(bool enable) // 允许点击表头进行排序 void QTableWidget::sortItems(int column, Qt::SortOrder order = Qt::AscendingOrder) // 排序接口 table->setSortingEnabled(true); // 运行排序 table-& 需要将QTableWidget设置为可以被点击,然后用下面的connect将点击信号与排序槽函数进行连接就可以了,注意,槽函数sortByColumn(int)需要自己定义。 connect(ui->tableWidget->horizontalHeader(),SIGNAL(sectionClicked(int )),this, SLOT(sortByColumn(int))); 1QTablewidget自动排序 Qtablewidget自带的有排序函数,点击表头可以进行某一行/列进行大小排序,但该函数仅限于静态表格数据,如果是定时刷新的表格数据,下一次刷新后就会恢复之前的非排序状态,如果想点击一次后,后面实时刷新的数据也按排序效果,那么需要重新写排序函数。 2.我是数据在QMAP中,对Qmap进行了排序,这样点击一次后,后面就可以一直按照大小排序了,而且是多列同时联动排序。
ui->tableWidget->horizontalHeader()->setSortIndicatorShown(true); //显示排序图标(默认为上下箭头) ui->tableWidget->horizontalHeader()->setSortIndicator(0,Qt::SortOrder::AscendingOrder); //设置第0列 升序排序
二.QTableWidget 修改排序图标的展现方式(修改图标、位置) 通过设置样式表的方法来改变图标: ui->tableWidget->horizontalHeader()->setStyleSheet("QHeaderView::up-arrow { subcontrol-position: center right; padding-right: 8px;" "image: url(:/images/sort_up.png);}" "QHeaderView::down-arrow { subcontrol-position: center right; padding-right: 8px;" "image: url(:/images/sort_down.png);}"); 三.QTableWidget 表头点击排序 排序通如下函数实现,参考qt助手: void QTableWidget::sortItems(int column, Qt::SortOrder order = Qt::AscendingOrder) Sorts all the rows in the table widget based on column and order. 连接表头的信号:QHeaderView *horizontalHeader() const 即可,代码实现如下: connect(ui->tableWidget->horizontalHeader(),SIGNAL(sectionClicked(int )),this, SLOT(sortTableByCol(int))); void MainWindow::sortTableByCol(int col) if(sortUpDown) //sortUpDown为自定义的一个bool变量,表示升序还是降序 ui->tableWidget->sortItems(col, Qt::AscendingOrder); sortUpDown=false; ui->tableWidget->sortItems(col, Qt::DescendingOrder); sortUpDown=true; 四.QTableWidget 字符排序和数字排序 1.如果使用setText()函数对 QTableWidget 的item进行数据设定的话,那么排序方式为字符串排序。 2.如果使用setdata()函数设置数据源的话,那么排序方式可以为数字排序。 参考如下代码: int index = 1; for(int i=0; i<ui->tableWidget->rowCount(); i++) ui->tableWidget->item(i,0)->setData(Qt::DisplayRole,index); //index 本质为数字,所以调用sortItems()排序函数时,会进行数字排序 ui->tableWidget->item(i,1)->setText(QString::number(index)); //index转换为字符串送入item,所以调用sortItems()排序函数时,会进行字符串排序 index += 3; 重写QAbstractItemModel类的sort()函数。 1、QTableWidget显示表格数据,为了达到一些自定义操作,经常需要自己写数据模型类和表头类,如下代码: m_model = new MyDataModel(this); m_headerView = new MyHeaderView(Qt::Horizontal, ui->tblvKits); ui->tblvKits->setModel(m_model); ui->t 今日,由于工作需要,要实现在QTableView中点击表头进行排序的功能,但QTableView中并未提供此功能,经过苦苦的网络搜索也为发现可用的代码。最后经过跟踪QTableWidget的排序功能实现,总算实现了此功能。 此文章将使用QT源码中自带的例子做为基础: (file source: examples/widgets/tutorials/modelview/4_headers/main Qt之 QTableWidget 列排序 1、常规的QTableWidget的排序接口 void QTableView::setSortingEnabled(bool enable) // 允许点击表头进行排序 void QTableWidget::sortItems(int column, Qt::SortOrder order = Qt::AscendingOrder) // 排序接口 table->setSortingEnabled(true); // 运行排序 table-& 需要将QTableWidget设置为可以被点击,然后用下面的connect将点击信号与排序槽函数进行连接就可以了,注意,槽函数sortByColumn(int)需要自己定义。 connect(ui->tableWidget->horizontalHeader(),SIGNAL(sectionClicked(int )),this, SLOT(sortByColumn(int))); 1QTablewidget自动排序 Qtablewidget自带的有排序函数,点击表头可以进行某一行/列进行大小排序,但该函数仅限于静态表格数据,如果是定时刷新的表格数据,下一次刷新后就会恢复之前的非排序状态,如果想点击一次后,后面实时刷新的数据也按排序效果,那么需要重新写排序函数。 2.我是数据在QMAP中,对Qmap进行了排序,这样点击一次后,后面就可以一直按照大小排序了,而且是多列同时联动排序。
通过设置样式表的方法来改变图标:
ui->tableWidget->horizontalHeader()->setStyleSheet("QHeaderView::up-arrow { subcontrol-position: center right; padding-right: 8px;" "image: url(:/images/sort_up.png);}" "QHeaderView::down-arrow { subcontrol-position: center right; padding-right: 8px;" "image: url(:/images/sort_down.png);}"); 三.QTableWidget 表头点击排序 排序通如下函数实现,参考qt助手: void QTableWidget::sortItems(int column, Qt::SortOrder order = Qt::AscendingOrder) Sorts all the rows in the table widget based on column and order. 连接表头的信号:QHeaderView *horizontalHeader() const 即可,代码实现如下: connect(ui->tableWidget->horizontalHeader(),SIGNAL(sectionClicked(int )),this, SLOT(sortTableByCol(int))); void MainWindow::sortTableByCol(int col) if(sortUpDown) //sortUpDown为自定义的一个bool变量,表示升序还是降序 ui->tableWidget->sortItems(col, Qt::AscendingOrder); sortUpDown=false; ui->tableWidget->sortItems(col, Qt::DescendingOrder); sortUpDown=true; 四.QTableWidget 字符排序和数字排序 1.如果使用setText()函数对 QTableWidget 的item进行数据设定的话,那么排序方式为字符串排序。 2.如果使用setdata()函数设置数据源的话,那么排序方式可以为数字排序。 参考如下代码: int index = 1; for(int i=0; i<ui->tableWidget->rowCount(); i++) ui->tableWidget->item(i,0)->setData(Qt::DisplayRole,index); //index 本质为数字,所以调用sortItems()排序函数时,会进行数字排序 ui->tableWidget->item(i,1)->setText(QString::number(index)); //index转换为字符串送入item,所以调用sortItems()排序函数时,会进行字符串排序 index += 3; 重写QAbstractItemModel类的sort()函数。 1、QTableWidget显示表格数据,为了达到一些自定义操作,经常需要自己写数据模型类和表头类,如下代码: m_model = new MyDataModel(this); m_headerView = new MyHeaderView(Qt::Horizontal, ui->tblvKits); ui->tblvKits->setModel(m_model); ui->t 今日,由于工作需要,要实现在QTableView中点击表头进行排序的功能,但QTableView中并未提供此功能,经过苦苦的网络搜索也为发现可用的代码。最后经过跟踪QTableWidget的排序功能实现,总算实现了此功能。 此文章将使用QT源码中自带的例子做为基础: (file source: examples/widgets/tutorials/modelview/4_headers/main Qt之 QTableWidget 列排序 1、常规的QTableWidget的排序接口 void QTableView::setSortingEnabled(bool enable) // 允许点击表头进行排序 void QTableWidget::sortItems(int column, Qt::SortOrder order = Qt::AscendingOrder) // 排序接口 table->setSortingEnabled(true); // 运行排序 table-& 需要将QTableWidget设置为可以被点击,然后用下面的connect将点击信号与排序槽函数进行连接就可以了,注意,槽函数sortByColumn(int)需要自己定义。 connect(ui->tableWidget->horizontalHeader(),SIGNAL(sectionClicked(int )),this, SLOT(sortByColumn(int))); 1QTablewidget自动排序 Qtablewidget自带的有排序函数,点击表头可以进行某一行/列进行大小排序,但该函数仅限于静态表格数据,如果是定时刷新的表格数据,下一次刷新后就会恢复之前的非排序状态,如果想点击一次后,后面实时刷新的数据也按排序效果,那么需要重新写排序函数。 2.我是数据在QMAP中,对Qmap进行了排序,这样点击一次后,后面就可以一直按照大小排序了,而且是多列同时联动排序。
ui->tableWidget->horizontalHeader()->setStyleSheet("QHeaderView::up-arrow { subcontrol-position: center right; padding-right: 8px;" "image: url(:/images/sort_up.png);}" "QHeaderView::down-arrow { subcontrol-position: center right; padding-right: 8px;" "image: url(:/images/sort_down.png);}");
三.QTableWidget 表头点击排序 排序通如下函数实现,参考qt助手: void QTableWidget::sortItems(int column, Qt::SortOrder order = Qt::AscendingOrder) Sorts all the rows in the table widget based on column and order. 连接表头的信号:QHeaderView *horizontalHeader() const 即可,代码实现如下: connect(ui->tableWidget->horizontalHeader(),SIGNAL(sectionClicked(int )),this, SLOT(sortTableByCol(int))); void MainWindow::sortTableByCol(int col) if(sortUpDown) //sortUpDown为自定义的一个bool变量,表示升序还是降序 ui->tableWidget->sortItems(col, Qt::AscendingOrder); sortUpDown=false; ui->tableWidget->sortItems(col, Qt::DescendingOrder); sortUpDown=true; 四.QTableWidget 字符排序和数字排序 1.如果使用setText()函数对 QTableWidget 的item进行数据设定的话,那么排序方式为字符串排序。 2.如果使用setdata()函数设置数据源的话,那么排序方式可以为数字排序。 参考如下代码: int index = 1; for(int i=0; i<ui->tableWidget->rowCount(); i++) ui->tableWidget->item(i,0)->setData(Qt::DisplayRole,index); //index 本质为数字,所以调用sortItems()排序函数时,会进行数字排序 ui->tableWidget->item(i,1)->setText(QString::number(index)); //index转换为字符串送入item,所以调用sortItems()排序函数时,会进行字符串排序 index += 3; 重写QAbstractItemModel类的sort()函数。 1、QTableWidget显示表格数据,为了达到一些自定义操作,经常需要自己写数据模型类和表头类,如下代码: m_model = new MyDataModel(this); m_headerView = new MyHeaderView(Qt::Horizontal, ui->tblvKits); ui->tblvKits->setModel(m_model); ui->t 今日,由于工作需要,要实现在QTableView中点击表头进行排序的功能,但QTableView中并未提供此功能,经过苦苦的网络搜索也为发现可用的代码。最后经过跟踪QTableWidget的排序功能实现,总算实现了此功能。 此文章将使用QT源码中自带的例子做为基础: (file source: examples/widgets/tutorials/modelview/4_headers/main Qt之 QTableWidget 列排序 1、常规的QTableWidget的排序接口 void QTableView::setSortingEnabled(bool enable) // 允许点击表头进行排序 void QTableWidget::sortItems(int column, Qt::SortOrder order = Qt::AscendingOrder) // 排序接口 table->setSortingEnabled(true); // 运行排序 table-& 需要将QTableWidget设置为可以被点击,然后用下面的connect将点击信号与排序槽函数进行连接就可以了,注意,槽函数sortByColumn(int)需要自己定义。 connect(ui->tableWidget->horizontalHeader(),SIGNAL(sectionClicked(int )),this, SLOT(sortByColumn(int))); 1QTablewidget自动排序 Qtablewidget自带的有排序函数,点击表头可以进行某一行/列进行大小排序,但该函数仅限于静态表格数据,如果是定时刷新的表格数据,下一次刷新后就会恢复之前的非排序状态,如果想点击一次后,后面实时刷新的数据也按排序效果,那么需要重新写排序函数。 2.我是数据在QMAP中,对Qmap进行了排序,这样点击一次后,后面就可以一直按照大小排序了,而且是多列同时联动排序。
排序通如下函数实现,参考qt助手:
void QTableWidget::sortItems(int column, Qt::SortOrder order = Qt::AscendingOrder) Sorts all the rows in the table widget based on column and order. 连接表头的信号:QHeaderView *horizontalHeader() const 即可,代码实现如下: connect(ui->tableWidget->horizontalHeader(),SIGNAL(sectionClicked(int )),this, SLOT(sortTableByCol(int))); void MainWindow::sortTableByCol(int col) if(sortUpDown) //sortUpDown为自定义的一个bool变量,表示升序还是降序 ui->tableWidget->sortItems(col, Qt::AscendingOrder); sortUpDown=false; ui->tableWidget->sortItems(col, Qt::DescendingOrder); sortUpDown=true; 四.QTableWidget 字符排序和数字排序 1.如果使用setText()函数对 QTableWidget 的item进行数据设定的话,那么排序方式为字符串排序。 2.如果使用setdata()函数设置数据源的话,那么排序方式可以为数字排序。 参考如下代码: int index = 1; for(int i=0; i<ui->tableWidget->rowCount(); i++) ui->tableWidget->item(i,0)->setData(Qt::DisplayRole,index); //index 本质为数字,所以调用sortItems()排序函数时,会进行数字排序 ui->tableWidget->item(i,1)->setText(QString::number(index)); //index转换为字符串送入item,所以调用sortItems()排序函数时,会进行字符串排序 index += 3; 重写QAbstractItemModel类的sort()函数。 1、QTableWidget显示表格数据,为了达到一些自定义操作,经常需要自己写数据模型类和表头类,如下代码: m_model = new MyDataModel(this); m_headerView = new MyHeaderView(Qt::Horizontal, ui->tblvKits); ui->tblvKits->setModel(m_model); ui->t 今日,由于工作需要,要实现在QTableView中点击表头进行排序的功能,但QTableView中并未提供此功能,经过苦苦的网络搜索也为发现可用的代码。最后经过跟踪QTableWidget的排序功能实现,总算实现了此功能。 此文章将使用QT源码中自带的例子做为基础: (file source: examples/widgets/tutorials/modelview/4_headers/main Qt之 QTableWidget 列排序 1、常规的QTableWidget的排序接口 void QTableView::setSortingEnabled(bool enable) // 允许点击表头进行排序 void QTableWidget::sortItems(int column, Qt::SortOrder order = Qt::AscendingOrder) // 排序接口 table->setSortingEnabled(true); // 运行排序 table-& 需要将QTableWidget设置为可以被点击,然后用下面的connect将点击信号与排序槽函数进行连接就可以了,注意,槽函数sortByColumn(int)需要自己定义。 connect(ui->tableWidget->horizontalHeader(),SIGNAL(sectionClicked(int )),this, SLOT(sortByColumn(int))); 1QTablewidget自动排序 Qtablewidget自带的有排序函数,点击表头可以进行某一行/列进行大小排序,但该函数仅限于静态表格数据,如果是定时刷新的表格数据,下一次刷新后就会恢复之前的非排序状态,如果想点击一次后,后面实时刷新的数据也按排序效果,那么需要重新写排序函数。 2.我是数据在QMAP中,对Qmap进行了排序,这样点击一次后,后面就可以一直按照大小排序了,而且是多列同时联动排序。
void QTableWidget::sortItems(int column, Qt::SortOrder order = Qt::AscendingOrder) Sorts all the rows in the table widget based on column and order. 连接表头的信号:QHeaderView *horizontalHeader() const 即可,代码实现如下:
Sorts all the rows in the table widget based on column and order.
连接表头的信号:QHeaderView *horizontalHeader() const 即可,代码实现如下:
connect(ui->tableWidget->horizontalHeader(),SIGNAL(sectionClicked(int )),this, SLOT(sortTableByCol(int))); void MainWindow::sortTableByCol(int col) if(sortUpDown) //sortUpDown为自定义的一个bool变量,表示升序还是降序 ui->tableWidget->sortItems(col, Qt::AscendingOrder); sortUpDown=false; ui->tableWidget->sortItems(col, Qt::DescendingOrder); sortUpDown=true; 四.QTableWidget 字符排序和数字排序 1.如果使用setText()函数对 QTableWidget 的item进行数据设定的话,那么排序方式为字符串排序。 2.如果使用setdata()函数设置数据源的话,那么排序方式可以为数字排序。 参考如下代码: int index = 1; for(int i=0; i<ui->tableWidget->rowCount(); i++) ui->tableWidget->item(i,0)->setData(Qt::DisplayRole,index); //index 本质为数字,所以调用sortItems()排序函数时,会进行数字排序 ui->tableWidget->item(i,1)->setText(QString::number(index)); //index转换为字符串送入item,所以调用sortItems()排序函数时,会进行字符串排序 index += 3; 重写QAbstractItemModel类的sort()函数。 1、QTableWidget显示表格数据,为了达到一些自定义操作,经常需要自己写数据模型类和表头类,如下代码: m_model = new MyDataModel(this); m_headerView = new MyHeaderView(Qt::Horizontal, ui->tblvKits); ui->tblvKits->setModel(m_model); ui->t 今日,由于工作需要,要实现在QTableView中点击表头进行排序的功能,但QTableView中并未提供此功能,经过苦苦的网络搜索也为发现可用的代码。最后经过跟踪QTableWidget的排序功能实现,总算实现了此功能。 此文章将使用QT源码中自带的例子做为基础: (file source: examples/widgets/tutorials/modelview/4_headers/main Qt之 QTableWidget 列排序 1、常规的QTableWidget的排序接口 void QTableView::setSortingEnabled(bool enable) // 允许点击表头进行排序 void QTableWidget::sortItems(int column, Qt::SortOrder order = Qt::AscendingOrder) // 排序接口 table->setSortingEnabled(true); // 运行排序 table-& 需要将QTableWidget设置为可以被点击,然后用下面的connect将点击信号与排序槽函数进行连接就可以了,注意,槽函数sortByColumn(int)需要自己定义。 connect(ui->tableWidget->horizontalHeader(),SIGNAL(sectionClicked(int )),this, SLOT(sortByColumn(int))); 1QTablewidget自动排序 Qtablewidget自带的有排序函数,点击表头可以进行某一行/列进行大小排序,但该函数仅限于静态表格数据,如果是定时刷新的表格数据,下一次刷新后就会恢复之前的非排序状态,如果想点击一次后,后面实时刷新的数据也按排序效果,那么需要重新写排序函数。 2.我是数据在QMAP中,对Qmap进行了排序,这样点击一次后,后面就可以一直按照大小排序了,而且是多列同时联动排序。
connect(ui->tableWidget->horizontalHeader(),SIGNAL(sectionClicked(int )),this, SLOT(sortTableByCol(int))); void MainWindow::sortTableByCol(int col) if(sortUpDown) //sortUpDown为自定义的一个bool变量,表示升序还是降序 ui->tableWidget->sortItems(col, Qt::AscendingOrder); sortUpDown=false; ui->tableWidget->sortItems(col, Qt::DescendingOrder); sortUpDown=true;
四.QTableWidget 字符排序和数字排序 1.如果使用setText()函数对 QTableWidget 的item进行数据设定的话,那么排序方式为字符串排序。 2.如果使用setdata()函数设置数据源的话,那么排序方式可以为数字排序。 参考如下代码: int index = 1; for(int i=0; i<ui->tableWidget->rowCount(); i++) ui->tableWidget->item(i,0)->setData(Qt::DisplayRole,index); //index 本质为数字,所以调用sortItems()排序函数时,会进行数字排序 ui->tableWidget->item(i,1)->setText(QString::number(index)); //index转换为字符串送入item,所以调用sortItems()排序函数时,会进行字符串排序 index += 3; 重写QAbstractItemModel类的sort()函数。 1、QTableWidget显示表格数据,为了达到一些自定义操作,经常需要自己写数据模型类和表头类,如下代码: m_model = new MyDataModel(this); m_headerView = new MyHeaderView(Qt::Horizontal, ui->tblvKits); ui->tblvKits->setModel(m_model); ui->t 今日,由于工作需要,要实现在QTableView中点击表头进行排序的功能,但QTableView中并未提供此功能,经过苦苦的网络搜索也为发现可用的代码。最后经过跟踪QTableWidget的排序功能实现,总算实现了此功能。 此文章将使用QT源码中自带的例子做为基础: (file source: examples/widgets/tutorials/modelview/4_headers/main Qt之 QTableWidget 列排序 1、常规的QTableWidget的排序接口 void QTableView::setSortingEnabled(bool enable) // 允许点击表头进行排序 void QTableWidget::sortItems(int column, Qt::SortOrder order = Qt::AscendingOrder) // 排序接口 table->setSortingEnabled(true); // 运行排序 table-& 需要将QTableWidget设置为可以被点击,然后用下面的connect将点击信号与排序槽函数进行连接就可以了,注意,槽函数sortByColumn(int)需要自己定义。 connect(ui->tableWidget->horizontalHeader(),SIGNAL(sectionClicked(int )),this, SLOT(sortByColumn(int))); 1QTablewidget自动排序 Qtablewidget自带的有排序函数,点击表头可以进行某一行/列进行大小排序,但该函数仅限于静态表格数据,如果是定时刷新的表格数据,下一次刷新后就会恢复之前的非排序状态,如果想点击一次后,后面实时刷新的数据也按排序效果,那么需要重新写排序函数。 2.我是数据在QMAP中,对Qmap进行了排序,这样点击一次后,后面就可以一直按照大小排序了,而且是多列同时联动排序。
1.如果使用setText()函数对 QTableWidget 的item进行数据设定的话,那么排序方式为字符串排序。 2.如果使用setdata()函数设置数据源的话,那么排序方式可以为数字排序。 参考如下代码:
int index = 1; for(int i=0; i<ui->tableWidget->rowCount(); i++) ui->tableWidget->item(i,0)->setData(Qt::DisplayRole,index); //index 本质为数字,所以调用sortItems()排序函数时,会进行数字排序 ui->tableWidget->item(i,1)->setText(QString::number(index)); //index转换为字符串送入item,所以调用sortItems()排序函数时,会进行字符串排序 index += 3; 重写QAbstractItemModel类的sort()函数。 1、QTableWidget显示表格数据,为了达到一些自定义操作,经常需要自己写数据模型类和表头类,如下代码: m_model = new MyDataModel(this); m_headerView = new MyHeaderView(Qt::Horizontal, ui->tblvKits); ui->tblvKits->setModel(m_model); ui->t 今日,由于工作需要,要实现在QTableView中点击表头进行排序的功能,但QTableView中并未提供此功能,经过苦苦的网络搜索也为发现可用的代码。最后经过跟踪QTableWidget的排序功能实现,总算实现了此功能。 此文章将使用QT源码中自带的例子做为基础: (file source: examples/widgets/tutorials/modelview/4_headers/main Qt之 QTableWidget 列排序 1、常规的QTableWidget的排序接口 void QTableView::setSortingEnabled(bool enable) // 允许点击表头进行排序 void QTableWidget::sortItems(int column, Qt::SortOrder order = Qt::AscendingOrder) // 排序接口 table->setSortingEnabled(true); // 运行排序 table-& 需要将QTableWidget设置为可以被点击,然后用下面的connect将点击信号与排序槽函数进行连接就可以了,注意,槽函数sortByColumn(int)需要自己定义。 connect(ui->tableWidget->horizontalHeader(),SIGNAL(sectionClicked(int )),this, SLOT(sortByColumn(int))); 1QTablewidget自动排序 Qtablewidget自带的有排序函数,点击表头可以进行某一行/列进行大小排序,但该函数仅限于静态表格数据,如果是定时刷新的表格数据,下一次刷新后就会恢复之前的非排序状态,如果想点击一次后,后面实时刷新的数据也按排序效果,那么需要重新写排序函数。 2.我是数据在QMAP中,对Qmap进行了排序,这样点击一次后,后面就可以一直按照大小排序了,而且是多列同时联动排序。