сортировка QAbstractTableModel и выставить его на qml

Мне нужно создать интеграцию между Qt а также qml, откуда Qt Я прошу некоторую информацию на сервер, создать tablemodel от Qt и выставить информацию qml, Я достиг этой точки, но теперь я должен отсортировать информацию. Я использую QSortFilterProxyModelбольшинство примеров, которые я нашел, созданы для виджетов и создают tableview от Qt, но когда я пытался создать его из qmlнет выбора "setSortingEnabled", в qml У меня много объектов не только TableView, Я использовал заказ model->sort(1, Qt:AscendingOrder) но нет изменений в qml экран

SimMainWindow.cpp

#include "SimMainWindow.h"#include "TurnDisplayTable.h"#include "TurnDisplayItem.h"#include <QtQml>
#include <QGraphicsObject>
#include <QDebug>
#include <QDeclarativeView>
#include <QQuickView>
#include <QQmlApplicationEngine>
#include <QtWidgets>
#include <QMainWindow>
#include <tablemodel.h>
#include <QSortFilterProxyModel>

SimMainWindow::SimMainWindow(int argc, char **argv): QGuiApplication(argc, argv), view()
{
qDebug() << "begin"; ///////////////////////////////

qmlRegisterType<TurnDisplayTable>("TurnDisplayTable", 1,0, "TurnDisplayTable");

filesModel= new TurnDisplayTable();
view.rootContext()->setContextProperty("idFilesModel", filesModel);
proxyModel = new QSortFilterProxyModel(this);
proxyModel->setSourceModel(filesModel);
proxyModel->sort(1, Qt::AscendingOrder);

view.rootContext()->setContextProperty("pModel", proxyModel);

view.setSource( QUrl::fromLocalFile("./ui/main.qml") );

QObject::connect((QObject*)view.rootObject(), SIGNAL(refreshMsg()), this, SLOT(refreshHome()));
QObject::connect((QObject*)view.rootObject(), SIGNAL(changeMsg()), this, SLOT(changeHome()));
QObject::connect((QObject*)view.rootObject(), SIGNAL(sortMsg()), this, SLOT(sortHome()));
QObject::connect((QObject*)view.rootObject(), SIGNAL(infoMsg(QString, QString)), this, SLOT(infoHome(QString, QString)));view.show();

qDebug() << "end"; ///////////////////////////////
}SimMainWindow::~SimMainWindow()
{}

void SimMainWindow::refreshHome()
{
qDebug() << "refresh";
QList<TurnDisplayItem> list;
QString  turn = "2";
QString  date = "septiembre";
TurnDisplayItem item(turn, date);
list << item;

turn = "4";
date = "mayo";
TurnDisplayItem item2(turn, date);
list << item2;

turn = "1";
date = "julio";
TurnDisplayItem item3(turn, date);
list << item3;

turn = "3";
date = "abril";
TurnDisplayItem item4(turn, date);
list << item4;

turn = "2";
date = "mayo";
TurnDisplayItem item5(turn, date);
list << item5;filesModel->setCurrencyMap(list);
proxyModel->setSourceModel(filesModel);
proxyModel->sort(1, Qt::AscendingOrder);
}

void SimMainWindow::changeHome()
{
qDebug() << "cambio";
QList<TurnDisplayItem> list;
QString  turn = "3";
QString  date = "sep";
TurnDisplayItem item(turn, date);
list << item;

turn = "1";
date = "may";
TurnDisplayItem item2(turn, date);
list << item2;

turn = "2";
date = "jul";
TurnDisplayItem item3(turn, date);
list << item3;

turn = "6";
date = "abr";
TurnDisplayItem item4(turn, date);
list << item4;

turn = "9";
date = "oct";
TurnDisplayItem item5(turn, date);
list << item5;filesModel->setCurrencyMap(list);
}

void SimMainWindow::sortHome()
{
proxyModel->sort(0, Qt::AscendingOrder);
view.rootContext()->setContextProperty("pModel", proxyModel);
qDebug()<< "sort...";
view.show();
}

void SimMainWindow::infoHome(const QString &turnH, const QString &dateH)
{
qDebug() << "info";
QList<TurnDisplayItem> list;
QString  turn = turnH;
QString  date = dateH;
TurnDisplayItem item(turn, date);
list << item;

filesModel->setCurrencyMap(list);
}

0

Решение

Попробуйте это, это работает в моем случае:

Model model;

QSortFilterProxyModel proxyModel;
proxyModel.setSortRole(Model::YOURCUSTOM_ROLE_HERE);
proxyModel.setSourceModel(&model);
proxyModel.setDynamicSortFilter(true);
proxyModel.sort(0);

Я подозреваю, что ваша модель не сортирует, потому что вы должны установить целевую роль, установив setSortRole(int role) и нанесение void QSortFilterProxyModel::sort(int column, Qt::SortOrder order = Qt::AscendingOrder) [virtual],

Я надеюсь, что это решит вашу проблему.

0

Другие решения


По вопросам рекламы [email protected]