2012-05-15 2 views
5

Je suis nouveau à Qt et ont besoin d'aide avec les éléments suivants:Peuplement Tableau Widget du fichier texte dans Qt

Je voudrais créer une interface graphique contenant une table Widget qui est peuplé par des informations provenant d'un onglet délimité fichier texte. Dans mon interface graphique, l'utilisateur doit d'abord rechercher le fichier texte, puis afficher le contenu dans le widget Tableau. J'ai fait la partie parcourir, mais comment puis-je charger les données à partir du fichier texte dans le tableau Widget?

+0

Cette question est assez vague, utilisez-vous MVC ou les widgets 'traditionnels'? Un widget de table est 2D, alors comment le texte va-t-il être disposé dans la table? – cmannett85

+0

Dans Qt Creator, il existe un contrôle graphique appelé Tableau Widget, que j'utilise. Je pensais que la question était simple. Je veux remplir une table dans mon interface graphique avec un fichier texte délimité par des tabulations comme source des données. Si vous utilisez un widget de table, ce n'est pas la meilleure approche, alors je suis ouvert à d'autres suggestions. Comme je l'ai mentionné, je suis nouveau à Qt. –

+0

Eh bien 'QTableWidget' est la meilleure option si vous voulez afficher uniquement du texte, dans une grille 2D, sans partager les données avec d'autres widgets. En outre, vous obtiendrez une meilleure réponse si vous avez seulement posé une seule question dans votre message: charger un fichier texte, l'analyser dans des chaînes séparées, puis les pousser dans un widget de table; sont trois processus très différents, et je serai surpris si chacun d'entre eux ne sont pas expliqués sur ce site ou les docs. – cmannett85

Répondre

8

Il s'agit de deux étapes, analyser le fichier, puis le pousser dans le widget. J'ai saisi ces lignes de QFile documentation.

QFile file("in.txt"); 
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) 
    return; 

while (!file.atEnd()) { 
    QByteArray line = file.readLine(); 
    process_line(line); 
} 

Votre fonction process_line devrait ressembler à ceci:

static int row = 0; 
QStringList ss = line.split('\t'); 

if(ui->tableWidget->rowCount() < row + 1) 
    ui->tableWidget->setRowCount(row + 1); 
if(ui->tableWidget->columnCount() < ss.size()) 
    ui->tableWidget->setColumnCount(ss.size()); 

for(int column = 0; column < ss.size(); column++) 
{ 
    QTableWidgetItem *newItem = new QTableWidgetItem(ss.at(column)); 
    ui->tableWidget->setItem(row, column, newItem); 
} 

row++; 

Pour plus d'informations sur la manipulation QTableWidgets, vérifiez la documentation. Pour les nouveaux utilisateurs utilisant le générateur GUI dans Qt Creator, il est difficile de le comprendre au début. Finalement, je recommanderais de passer à la construction de l'interface graphique comme ils le font dans examples ... en ajoutant tout à la main dans le code au lieu de glisser-déposer.

-2

Désolé ...

void squidlogreader_::process_line(QString line) 
{ 
    static int row = 0; 
    QStringList ss = line.split('\t'); 

    if(ui->tableWidget->rowCount() < row + 1) 
    ui->tableWidget->setRowCount(row + 1); 
    if(ui->tableWidget->columnCount() < ss.size()) 
    ui->tableWidget->setColumnCount(ss.size()); 

    for(int column = 0; column < ss.size(); column++) 
    { 
    QTableWidgetItem *newItem = new QTableWidgetItem(ss.at(column)); 
    ui->tableWidget->setItem(row, column, newItem); 
    } 

    row++; 

} 
void squidlogreader_::on_pushButton_clicked() 
{ 
    QFile file("in.txt"); 
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) 
     return; 

    while (!file.atEnd()) { 
     QString line = file.readLine(); 
     process_line(line); 
    }