Russian Qt Forum

Qt => Базы данных => Тема начата: kandrey от Июнь 03, 2013, 18:51



Название: QSortFilterProxyModel + QIdentityProxyModel (Qt 4.8.4)
Отправлено: kandrey от Июнь 03, 2013, 18:51
Привет!
Есть такой кусок кода

class Model : public QAbstractTableModel
{
public:
    Model(QObject *parent = 0) :
        QAbstractTableModel(parent)
    {}
    int rowCount(const QModelIndex &parent) const
    { return 10; }
    int columnCount(const QModelIndex &parent) const
    { return 5; }
    QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const
    {
        if(!index.isValid())
            return QVariant();

        if(role == Qt::DisplayRole)
            return QString("%1:%2").arg(index.row()).arg(index.column());

        return QVariant();
    }
};

TestWidget::TestWidget(QWidget *parent) :
    QWidget(parent)
{
    QVBoxLayout *l = new QVBoxLayout;
    setLayout(l);
    QTableView *view = new QTableView(this);
    view->setSelectionBehavior(QAbstractItemView::SelectRows);
    view->setSortingEnabled(true);
    l->addWidget(view);

    Model *model = new Model(this);

    QSortFilterProxyModel *sortModel = new QSortFilterProxyModel(this);
    sortModel->setSourceModel(model);

    QIdentityProxyModel *proxy = new QIdentityProxyModel(this);
    proxy->setSourceModel(sortModel);

    view->setModel(proxy);

    resize(800, 600);
}

если в таблице выделить строку и нажать сортировку выделенные ячейки оказываются в разных строках. Что не так с QIdentityProxyModel или я как то не так ее применяю?


Название: Re: QSortFilterProxyModel + QIdentityProxyModel (Qt 4.8.4)
Отправлено: 0x6368656174 от Июнь 04, 2013, 03:42
Надо наоборот:
proxy->setSourceModel(model);
sortModel->setSourceModel(proxy);
view->setModel(sortModel);


Название: Re: QSortFilterProxyModel + QIdentityProxyModel (Qt 4.8.4)
Отправлено: kandrey от Июнь 04, 2013, 13:45
а почему так надо? а если нужна прокси модель именно после сортировки?