Ich versuche, Daten von einem QGeoCoordinate innerhalb meiner eigenen Klasse NavaidsModel zu erhalten. HierZugriff auf Daten aus der Unterklasse innerhalb eines Proxy-Filters
ist der Konstruktor von NavaidsModel:
class NavaidsModel : public QAbstractListModel
{
Q_OBJECT
public:
NavaidsModel(QObject *parent = Q_NULLPTR):QAbstractListModel(parent){
}
enum NavaidsRoles {
PositionRole = Qt::UserRole + 1,
OACICodeRole,
CountryCodeRole
};
Hier ist die filterAcceptsRow() meines proxyfilter NavaidsFilter:
bool NavaidsFilter::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const
{
QRegExp rx("ROBU");
QAbstractItemModel *model = sourceModel();
QHashIterator<int, QByteArray> it(sourceModel()->roleNames());
while (it.hasNext()) {
it.next();
QModelIndex sourceIndex = model->index(sourceRow, 0, sourceParent);
//Here are the tests to get the data
qDebug() <<"Data 257 :" << sourceIndex.data(257); //PositionRole
qDebug() <<"Data 258 :" << sourceIndex.data(258); //OACICodeRole
qDebug() <<"Data 259 :" << sourceIndex.data(259); //CountryCodeRole
QString key = model->data(sourceIndex, it.key()).toString();
if (key.contains(rx))
return true;
}
return false;
}
Und hier sind die qDebug() Ergebnisse:
index.row = 0 role = 257
Point : "MM" "ROBSO" QGeoCoordinate(21.75, -107.12556, 0)
PositionRole QGeoCoordinate(21.75, -107.12556, 0)
Data 257 : QVariant(QGeoCoordinate,)
index.row = 0 role = 258
Point : "MM" "ROBSO" QGeoCoordinate(21.75, -107.12556, 0)
OACICodeRole "ROBSO"
Data 258 : QVariant(QString, "ROBSO")
index.row = 0 role = 259
Point : "MM" "ROBSO" QGeoCoordinate(21.75, -107.12556, 0)
CountryCodeRole "MM"
Data 259 : QVariant(QString, "MM")
OACICode ein CountryCode sind OK, wie wir in den Ergebnissen sehen können. Aber für Daten 257 möchte ich die Werte (lat = 21,75; lon = -107,12556; alt = 0) innerhalb einer Grenze zu vergleichen, und zu diesem Zeitpunkt kann ich sie in keiner Weise erhalten .
Wie kann ich das erreichen?
Danke für Hilfe.
Ich vermute, das ist einfach eine Einschränkung von 'qDebug' und' QVariant'. Bei der Ausgabe eines 'QVariant' weiß' qDebug', wie man mit Grundtypen wie 'QString' etc., aber nicht mit' QGeoCoordinate' umgehen kann. Ersetzen Sie 'sourceIndex.data (257)' durch 'sourceIndex.data (257) .value(). ToString()'. –