添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

QTableWidget 表头排序

一.QTableWidget 打开表头排序

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-&gt;tableWidget-&gt;horizontalHeader(),SIGNAL(sectionClicked(int )),this, SLOT(sortByColumn(int)));
1QTablewidget自动排序 Qtablewidget自带的有排序函数,点击表头可以进行某一行/列进行大小排序,但该函数仅限于静态表格数据,如果是定时刷新的表格数据,下一次刷新后就会恢复之前的非排序状态,如果想点击一次后,后面实时刷新的数据也按排序效果,那么需要重新写排序函数。 2.我是数据在QMAP中,对Qmap进行了排序,这样点击一次后,后面就可以一直按照大小排序了,而且是多列同时联动排序