2015-08-10 3 views
1

Je travaille actuellement sur un projet qui traite une liste de ROI de longueur variable (régions d'intérêts - polygone -), je vais devoir le stocker dans un fichier INI via QSettings, j'ai du mal à trouver un simple solution qui enregistre les données d'une manière lisible par l'homme.Quelle est la meilleure façon de stocker la liste des coordonnées 2D dans le fichier Qsettings INI?

J'ai essayé l'enregistrement d'un retour sur investissement sous forme de tableau qui se traduit par un format comme:

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 

Je suis en train de réaliser un format comme:

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

Malheureusement, mon google foo échoue. J'ai lu sur l'enregistrement d'un lecteur/écrivain personnalisé à QSettings, mais je me demandais s'il existe un moyen simple de le faire car ROI et la liste des coordonnées 2D semble être largement utilisé pour diverses applications dans Qt.

Merci d'avance, faites-moi savoir si vous auriez besoin d'informations sur l'application.

p.s. Qsetting n'est pas un must, je peux utiliser n'importe quelle bibliothèque supportée et mature.

+1

Ce serait assez facile avec le [module 'json'] (https://docs.python.org/ 2/library/json.html). – 101

+0

Désolé pour répondre si tard, mais le format INI est plus lisible que json IMHO. Merci pour la suggestion. :) –

Répondre

3

Vous pouvez mettre vos données dans un QVariant puis enregistrez-le au format 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()); 
    } 
} 
+0

'QByteArray text = QJsonDocument :: fromVariant (c) .toJson (QJsonDocument :: Compact);' devrait être 'QByteArray text = QJsonDocument :: fromVariant (points_variant) .toJson (QJsonDocument :: Compact);', isn ' t-il? merci pour la réponse, je pense que c'est le meilleur que je peux obtenir. Mais je vais essayer d'écrire une classe personnalisée pour qsettings, si je réussis, je vais mettre à jour ici. :) –