先看效果图 点击一次对应列进行降序,再点击一次进行升序,分别对应图1、图2。
实现代码
构造函数中设置了一个sign以及关联对应的信号。 双击表头的信号为sectionDoubleClickClicked
m_sign = true;//设置一个标志位
// 单击表头
connect(ui.tableWidget->horizontalHeader(), &QHeaderView::sectionClicked, this, &QtTableWidgetsSort::onCustomSort);
// 双击表头信号 sectionDoubleClickClicked
槽函数实现为
void QtTableWidgetsSort::onCustomSort(int logicalIndex)
{
for (size_t i = 0; i < ui.tableWidget->rowCount() - 1; ++i)
{
for (size_t j = 0; j < ui.tableWidget->rowCount() - i - 1; ++j)
{
if(m_sign == (ui.tableWidget->item(j,logicalIndex)->text() >
ui.tableWidget->item(j + 1, logicalIndex)->text()))
{
for (size_t k = 0; k < ui.tableWidget->columnCount(); ++k)
{
QTableWidgetItem item1 = *ui.tableWidget->item(j, k);
ui.tableWidget->item(j, k)->setText(ui.tableWidget->item(j + 1, k)->text());
ui.tableWidget->item(j + 1, k)->setText(item1.text());
}
}
}
}
m_sign = !m_sign;
}