先看效果图 点击一次对应列进行降序,再点击一次进行升序,分别对应图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; }