QTableWidget排序:

最简单的方式:重写QTableWidgetItem中的比较符号即可。 bool operator < (const QTableWidgetItem &other) const
设置item
#include "form.h"
#include "ui_form.h"
#include "itablewidgetitem.h"
#include "Dtablewidgetitem.h"
Form::Form(QWidget *parent) :
QWidget(parent),
ui(new Ui::Form)
{
ui->setupUi(this);
int index = 1;
double value = 1.00;
ui->tableWidget->setRowCount(5);
ui->tableWidget->horizontalHeader()->setSortIndicatorShown(true);
ui->tableWidget->horizontalHeader()->setSectionsClickable(true);
for(int i=0; i<ui->tableWidget->rowCount(); i++)
{
QTableWidgetItem *item = new DTableWidgetItem(QString::number(value,'f',3));
QTableWidgetItem *item2 = new ITableWidgetItem(QString::number(index));
ui->tableWidget->setItem(i,0,item);
ui->tableWidget->setItem(i,1,item2);
//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;
value += 5.00;
}
connect(ui->tableWidget->horizontalHeader(),SIGNAL(sectionClicked(int )),this, SLOT(sortTableByCol(int)));
}
void Form::sortTableByCol(int col)
{
if(m_bUpOrDown) //sortUpDown为自定义的一个bool变量,表示升序还是降序
{
ui->tableWidget->sortItems(col, Qt::AscendingOrder);
m_bUpOrDown=false;
}
else
{
ui->tableWidget->sortItems(col, Qt::DescendingOrder);
m_bUpOrDown=true;
}
}
Form::~Form()
{
delete ui;
}
#ifndef DTABLEWIDGETITEM_H
#define DTABLEWIDGETITEM_H
#include <QWidget>
#include <QTableWidgetItem>
class DTableWidgetItem : public QTableWidgetItem
{
public:
explicit DTableWidgetItem(const QString txt = QString("0.000"));
~DTableWidgetItem();
bool operator < (const QTableWidgetItem &other) const
{
QString str1 = text();
QString str2 = other.text();
return str1.toDouble() < str2.toDouble();
}
};
#endif // DTABLEWIDGETITEM_H
#ifndef ITABLEWIDGETITEM_H
#define ITABLEWIDGETITEM_H
#include <QWidget>
#include <QTableWidgetItem>
class ITableWidgetItem : public QTableWidgetItem
{
public:
explicit ITableWidgetItem(const QString txt = QString("0"));
~ITableWidgetItem();
bool operator < (const QTableWidgetItem &other) const
{
QString str1 = text();
QString str2 = other.text();
return str1.toInt() < str2.toInt();
}
};
#endif // ITABLEWIDGETITEM_H
以上是比较简单的情况。如果需要复杂一些的,传送门:
https://blog.csdn.net/liang19890820/article/details/50782756
本文详细介绍了如何在Qt中使用QTableWidget实现自定义排序功能,通过重写QTableWidgetItem的比较运算符,实现数字和字符串的升序和降序排列。适用于需要在Qt应用程序中实现数据表格排序的开发者。
188

被折叠的 条评论
为什么被折叠?



