我正在尝试从我自己的NavaidsModel类中的QGeoCoordinate获取数据。
以下是NavaidsModel的构造函数:
class NavaidsModel : public QAbstractListModel
{
Q_OBJECT
public:
NavaidsModel(QObject *parent = Q_NULLPTR):QAbstractListModel(parent){
}
enum NavaidsRoles {
PositionRole = Qt::UserRole + 1,
OACICodeRole,
CountryCodeRole
};
以下是proxyfilter NavaidsFilter的filterAcceptsRow():
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;
}
以下是qDebug()结果:
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和CountryCode都可以。
但是,对于数据257,我希望得到值(lat=21.75;lon=-107.12556;alt=0),以便在边界限制内进行比较,目前,我无法以任何方式获得它们。
我怎样才能做到这一点?
谢谢你的帮助。