2012-04-02 3 views
3

Je suis un programmeur étudiant utilisant QT pour développer et appliquer pour le travail. Actuellement, je développe les fonctions de sauvegarde dans lesquelles les données sont extraites d'une table et enregistrées dans un fichier. Je rencontre des problèmes lorsque j'essaie d'écrire les données dans des colonnes. Ne pas confondre qui que ce soit mon problème est le formatage du texte lors de l'enregistrement de la table de données; ne pas y lire. Donc, actuellement lorsque les données sont enregistrées à partir de ma table, il est enregistré dans un fichier et ressemble à ceci:Utilisation de iomanip pour mettre en forme la sortie de données dans un fichier texte avec Qt

0 0.048 300 101325 0 0 
10 0.048 300 101325 0 0 

j'ai besoin de ressembler à ce

0 0.048 300 101325 0 0 
10 0.048 300 101325 0 0 

Au cours de recherches, je suis tombé sur setw de la iomanip bibliothèque en C++ qui définit une quantité minimale de caractères pour remplir les données et utilise ensuite le reste comme remplissage. Cela semble parfait, non? Le problème est que je ne peux pas l'obtenir pour travailler avec autre chose que cout; ce qui n'est pas ce dont j'ai besoin. J'en ai besoin pour ajouter des espaces à ma chaîne avant de l'écrire.

Je pense aussi que Qt devrait probablement avoir quelque chose pour m'aider à accomplir ce dont j'ai besoin ici (beaucoup plus facile). Je viens de cant semblent trouver cette fonction de membre après refencing QString documentation, QStringList Doucmentation, et surtout QTextStream Documentation.

mes enregistrons actuellement la fonction ressemble à ceci:

QTextStream data(&saveFileAsscf); 
QStringList tmpList; 
for (int x = 0; x<ui->tableWidgetReaderTable->rowCount(); x++) 
       { 
        strList.clear(); 
        for(int a = 0; a < ui->tableWidgetReaderTable->columnCount(); a++) 
        { 
         strList << ui->tableWidgetReaderTable->item(x,a)->text(); 
        } 
        data <<strList.join(" ") << "\n"; 
       } 

Je suis sûr que setFieldWidth est ma réponse de la QTextStream Documentation. mais je ne peux pas le faire fonctionner correctement. Essayé:

data.setFieldWidth(13) << strList.join(" ") << "\n"; 

J'espère que ceci est une réponse facile pour quelqu'un et je suis juste en cours d'exécution dans certains écrivains bloc, mais toute aide serait apperciated à y parvenir. Merci d'avoir lu mon message et j'apprécie toute aide apportée pour combler le fossé ici!

+0

en effet; supposons que je pourrais le plus mon flux de texte à la boucle interne pour accomplir l'effet désiré (c'est-à-dire, une fois que setFieldWidth fonctionne correctement). –

+0

Quel est le type de 'strList'? –

+1

une combinaison de méthodes QString telles que 'leftJustified()' et 'rightJustified()' pourrait vous aider aussi – unexplored

Répondre

2

std::fstream est une option si vous souhaitez utiliser STL. Cependant, si vous traitez toute la liste de chaînes comme un champ, votre largeur est bien supérieure à 13 par l'exemple de sortie donné, vous pouvez essayer setFieldWidth(23) mais il faudra probablement compléter la fin. Si vous traitez plutôt chaque valeur comme un champ, cela devient plus facile.

Exemple de ce que je veux dire en traitant chaque valeur comme un champ:

QTextStream data(&saveFileAsscf); 
for (int x = 0; x<ui->tableWidgetReaderTable->rowCount(); x++) 
{ 
    data.setPadChar(' '); 
    for(int a = 0; a < ui->tableWidgetReaderTable->columnCount(); a++) 
    { 
     QString value = ui->tableWidgetReaderTable->item(x,a)->text(); 
     data.setFieldWidth(qMax(2, value.length())); 
     data << value; 
     data.setFieldWidth(1); 
     data << " "; 
    } 
    data << "\n"; 
} 
+0

Vous devriez donner un exemple sur _how_ pour définir une largeur. Je suggérerais 'data << setw (?) << ui-> tableWidg ...'. – Chad

+0

mis à jour par commentaire du Tchad avec une façon de le faire. Ne pas dire que c'est le meilleur moyen par tous les moyens juste le premier qui vient à l'esprit. – AJG85

Questions connexes