【问题标题】:How to exclude one row from sort by column on QSortFilterProxyModel如何从 QSortFilterProxyModel 上的按列排序中排除一行
【发布时间】:2019-02-19 22:19:03
【问题描述】:

我将 QTableView 与 QSortFilterProxyModel 一起使用。

我有手动输入的空行:

表格示例

现在我想按日期排序

但我不想移动最后一行

排序表示例

感谢您的帮助

proxyModel->sort(2);

【问题讨论】:

    标签: qt sorting qsortfilterproxymodel


    【解决方案1】:

    您可以使用不对最后一行进行排序的自定义 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();
    }
    

    【讨论】:

      猜你喜欢
      • 2021-10-14
      • 2016-12-24
      • 1970-01-01
      • 2016-12-14
      • 2011-04-19
      • 1970-01-01
      • 2021-06-10
      • 2018-10-23
      相关资源
      最近更新 更多