0
自分のクラス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()である:
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()の結果は、
OACICodeとCountryCodeは、結果でわかるようにOKです。 しかし、データ257の場合、境界の制限内で比較する値(lat = 21.75; lon = -107.12556; alt = 0)を取得したいと考えていますが、現時点ではどのような方法でも取得できません。
どうすれば実現できますか?
ありがとうございました。 、data()
方法はQVariant
を返しますが、QVariant::fromValue()
を使用し、それを解決するために、デフォルトでサポートされていないいくつかの種類があり、
QVariant data(const QModelIndex & index, int role=Qt::DisplayRole) const {
if (index.row() < 0 || index.row() >= mPoints.count())
return QVariant();
const NavaidsPoint &point = mPoints[index.row()];
if (role == PositionRole)
return QVariant::fromValue(point.position());
else if (role == OACICodeRole)
return point.oaciCode();
else if (role == CountryCodeRole)
return point.countryCode();
return QVariant();
}
:あなたは、私は前の質問でお見せしたモデルを使用していると仮定すると、
これは単にqDebugとQVariantの制限であると思われます。 'QVariant'を出力するときに' qDebug'は 'QString'などの基本型を扱う方法