1

私は現在、ROI (関心領域 -- ポリゴン --) の可変長リストを扱うプロジェクトに取り組んでいます。QSettings を介して INI ファイルに保存する必要があります。簡単な解決策を見つけるのに問題があります。人間が読める方法でデータを保存します。

ROI を配列として保存しようとしましたが、次のような形式になります。

ROI
ROI/1/x : 1.2  
ROI/1/y : 4.3  
ROI/2/x : 1.5  
ROI/2/y : 7.4  
ROI/3/x : 2.5  
ROI/3/y : 4.3  
ROI/4/x : 9.0  
ROI/4/y : 3.4  

私は次のようなフォーマットを達成しようとしています:

ROI = [(1.2, 4.3), (1.5, 7.4), (2.5, 4.3), (9.0, 3.4)]

残念ながら、My google foo は失敗します。カスタムリーダー/ライターを QSettings に登録する方法について読んでいましたが、Qt のさまざまなアプリケーションで ROI と 2D 座標のリストが広く使用されているように見えるため、簡単な方法がないかどうか疑問に思っていました。

事前に感謝します。アプリケーションに関する情報が必要な場合はお知らせください。

ps Qsetting は必須ではありません。サポートされている成熟したライブラリを使用できます。

4

1 に答える 1

3

データを QVariant に入れて、JSON 形式で保存できます。

QList<QPointF> points;
points << QPointF(1.0, 2.0) << QPointF(3.0, 4.0);

QVariantList points_variant;
foreach(QPointF point, points) {
  points_variant << QVariant(QVariantList() << point.x() << point.y());
}

QByteArray text = QJsonDocument::fromVariant(points_variant).toJson(QJsonDocument::Compact);
qDebug() << text;
// -> "[[1.1000000000000001,2.2000000000000002],[3.2999999999999998,4.4000000000000004]]"

QList<QPointF> points2;
QVariantList points_variant2 = QJsonDocument::fromJson(text).toVariant().toList();
foreach(QVariant v, points_variant2) {
  QVariantList list = v.toList();
  if (list.count() == 2) {
    points2 << QPointF(list[0].toDouble(), list[1].toDouble());
  }
}
于 2015-08-11T00:10:48.843 に答える