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;
}
else
{
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;
}