我正在将QTableView与QSortFilterProxyModel一起使用。
我有emty行可以手动输入:
表格示例
现在我想按日期排序
但是我不想移动最后一行
排序表示例
我将非常感谢您的帮助
proxyModel->sort(2);
答案 0 :(得分:0)
您可以使用不对最后一行进行排序的自定义QSortFilterProxyModel。在下面的示例中,您将在左侧看到原始表格,在右侧看到具有特殊顺序的表格。
#include <QtWidgets>
class SortFilterProxyModel: public QSortFilterProxyModel
{
public:
using QSortFilterProxyModel::QSortFilterProxyModel;
bool lessThan(const QModelIndex &left,
const QModelIndex &right) const
{
int row_max = std::max(left.row(), right.row());
if(row_max >= sourceModel()->rowCount()-1)
return left.row() < right.row();
return QSortFilterProxyModel::lessThan(left, right);
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget w;
QTableView *left_view = new QTableView;
QTableView *right_view = new QTableView;
QHBoxLayout *hlay = new QHBoxLayout(&w);
hlay->addWidget(left_view);
hlay->addWidget(right_view);
QStandardItemModel model(12, 3);
SortFilterProxyModel proxy;
proxy.setSourceModel(&model);
left_view->setModel(&model);
right_view->setModel(&proxy);
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_real_distribution<> dis(100.0, 200.0);
for (int i=0; i< model.rowCount(); ++i) {
for(int j=0; j<model.columnCount(); ++j){
QStandardItem *it = new QStandardItem;
it->setData(dis(gen), Qt::DisplayRole);
model.setItem(i, j, it);
}
}
w.resize(640, 480);
proxy.sort(2);
w.show();
return a.exec();
}