#include "fsmproxy.h"
#include <QDateTime>
FSMProxy::FSMProxy(QObject *parent)
: QSortFilterProxyModel(parent)
{
}
bool FSMProxy::filterAcceptsColumn(int source_column, const QModelIndex &source_parent) const
{
Q_UNUSED(source_parent)
//隐藏某些列
if(source_column >= 2)
return false;
return true;
}
bool FSMProxy::lessThan(const QModelIndex &left, const QModelIndex &right) const
{
QVariant leftData = sourceModel()->data(left);
QVariant rightData = sourceModel()->data(right);
//按datetime 排序
if (leftData.type() == QVariant::DateTime) {
return leftData.toDateTime() < rightData.toDateTime();
} else {
//按decimal 来排序
return leftData.toInt() < rightData.toInt();
//按string 来排序
// QString leftString = leftData.toString();
// QString rightString = rightData.toString();
// return QString::localeAwareCompare(leftString, rightString) < 0;
}
}
QTableView *tableview = new QTableView;
tableview->setSortingEnabled(true);
QStandardItemModel *model = new QStandardItemModel;
FSMProxy *proxy = new FSMProxy(this);
proxy->setSourceModel(model);
tableview->setModel(proxy);
class FSMProxy : public QSortFilterProxyModel
{
Q_OBJECT
public:
FSMProxy(QObject *parent);
protected:
bool filterAcceptsColumn(int source_column, const QModelIndex &source_parent) const;
virtual bool lessThan(const QModelIndex &left, const QModelIndex &right) const;
};
利用 QSortFilterProxyMode reimplement来实现; 目前可达到的效果有,隐藏列,行,指定排序规则三种