Ich bin ein Compilation Problem konfrontiert QSortFilterProxyModel verwenden, wenn zu setSourceModel versuchenFehler: keine passende Funktion für Aufruf QSortFilterProxyModel :: setSourceModel (NavaidsModel &
Die Fehlermeldung lautet:. Keine passende Funktion für Aufruf QSortFilterProxyModel :: setSourceModel (NavaidsModel &)
und der Kandidat ist: virtual void SortFilterProxyModel :: setSourceModel (QAbstractItemModel *)
Hier ist mein Code:
main.cpp
#include "navaidsmodel.h"
#include <QListView>
#include <QApplication>
#include <QSortFilterProxyModel>
int main(int c, char **v)
{
QApplication a(c, v);
//Model
NavaidsModel model;
model.readFromCSV(QCoreApplication::applicationDirPath() + "/files/data.csv");
//Proxy
QSortFilterProxyModel *proxyModel = new QSortFilterProxyModel;
proxyModel->setSourceModel(model); //Here is the trick
//Filter
QRegExp rx("ROBU");
rx.setCaseSensitivity(Qt::CaseInsensitive);
rx.setPatternSyntax(QRegExp::Wildcard);
proxyModel->setFilterRegExp(rx);
proxyModel->setFilterKeyColumn(0);
//View
QListView view;
view.setUniformItemSizes(true);
view.setModel(proxyModel);
view.show();
return a.exec();
}
und hier ist der Konstruktor für navaidsmodel:
class NavaidsModel : public QAbstractListModel
{
Q_OBJECT
public:
NavaidsModel(QObject *parent = Q_NULLPTR):QAbstractListModel(parent){
}
enum NavaidsRoles {
PositionRole = Qt::UserRole + 1,
OACICodeRole,
CountryCodeRole
};
Also, ich verstehe setSourceModel eine QAbstractItemModel anfordern.
Für mich erbt NavaidsModel von QAbstractListModel, die von QAbstractItemModel erben.
Also sollte es in Ordnung sein, aber es ist nicht.
Können Sie mir erklären, was die Ursache des Problems ist?
Danke für Hilfe.
Es ist wirklich ein Schmerz für mich Verwendung zwischen Zeigern und Variablen. Grundsätzlich verstehe ich den Unterschied richtig, aber wenn ich an der Wand bin, kann ich meinen Verstand nicht richtig strukturieren. Gleiches gilt für die Verwendung von "neu". Vielen Dank für Ihre Hilfe und Empfehlungen. – kontiki
Sie sollten wirklich versuchen, Ihren Kopf darum zu wickeln. Eine falsche Verwendung von Zeigern kann zu einigen sehr unangenehmen Fehlern führen. Sie sollten wahrscheinlich lesen: https://doc.qt.io/qt-5/objecttrees.html, https://doc.qt.io/qt-5/qsharedpointer.html und https://doc.qt.io /qt-5/qscopedpointer.html. Dies sind alle sicheren Möglichkeiten, Zeiger zu behandeln, die Sie versuchen sollten, zu folgen und zu verwenden. – Felix