Вы можете использовать пользовательский 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();
}