내 클래스 NavaidsModel 내의 QGeoCoordinate에서 데이터를 가져 오려고합니다.프록시 필터 내의 하위 클래스에서 데이터에 액세스
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")
:
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() 결과입니다
다음class NavaidsModel : public QAbstractListModel
{
Q_OBJECT
public:
NavaidsModel(QObject *parent = Q_NULLPTR):QAbstractListModel(parent){
}
enum NavaidsRoles {
PositionRole = Qt::UserRole + 1,
OACICodeRole,
CountryCodeRole
};
이 NavaidsFilter 내 proxyfilter의 filterAcceptsRow()입니다 : 여기
는 NavaidsModel의 생성자OACICode와 CountryCode는 결과에서 알 수 있듯이 괜찮습니다. 그러나 데이터 257의 경우 경계 한계 내에서 비교할 값 (lat = 21.75; lon = -107.12556; alt = 0)을 가져오고 싶습니다. 현재로서는 어떤 방식으로도 얻을 수 없습니다. .
어떻게해야합니까?
도움 주셔서 감사합니다.
이것이 단순히 qDebug 및 QVariant의 제한이라고 생각합니다. 'QVariant'를 출력 할 때'qDebug'는'QString' 등의 기본 유형을 처리하는 방법을 알고 있지만'QGeoCoordinate'는 처리하지 않습니다. 'sourceIndex.data (257)'을'sourceIndex.data (257) .value(). toString()'으로 바꾸어보십시오. –