QTableWidget 设置表头排序

QTableWidget 表头排序

一.QTableWidget 打开表头排序

ui->tableWidget->horizontalHeader()->setSortIndicatorShown(true);		//显示排序图标(默认为上下箭头)
ui->tableWidget->horizontalHeader()->setSortIndicator(0,Qt::SortOrder::AscendingOrder);	//设置第0列 升序排序

QTableWidget 设置表头排序_第1张图片

二.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 设置表头排序_第2张图片

三.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; itableWidget->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;
}

你可能感兴趣的:(Qt)