2012-05-15 19 views
5

Sono nuovo di Qt e hanno bisogno di aiuto con il seguente:popolamento Tabella Widget da file di testo in Qt

vorrei creare una GUI che contiene una tabella Widget che è popolata da informazioni provenienti da un delimitato da tabulazioni file di testo. Nella mia GUI, l'utente dovrebbe prima cercare il file di testo e poi mostrerebbe il contenuto nel Table Widget. Ho fatto la parte di ricerca, ma come faccio a caricare i dati dal file di testo nel Table Widget?

+0

Questa domanda è molto vaga, stai usando MVC o dei widget 'tradizionali'? Un widget di tabella è 2D, quindi come sarà disposto il testo nella tabella? – cmannett85

+0

In Qt Creator, c'è un controllo della GUI chiamato Table Widget che è quello che sto usando. Pensavo che la domanda fosse semplice. Voglio popolare una tabella nella GUI con un file di testo delimitato da tabulazione come origine dei dati. Se si utilizza un Table Widget, non è l'approccio migliore, quindi sono aperto ad altri suggerimenti. Come ho detto, sono nuovo di Qt. –

+0

Bene 'QTableWidget' è l'opzione migliore se si desidera visualizzare solo il testo, in una griglia 2D, senza condividere i dati con altri widget. Inoltre otterrai una risposta migliore se ti viene posta una sola domanda nel tuo post: caricamento di un file di testo, analisi in stringhe separate e quindi inserimento in un widget di tabella; sono tre processi molto diversi, e sarò sorpreso se ognuno di essi non viene spiegato su questo sito o sui documenti. – cmannett85

risposta

8

Sono due passaggi, analizza il file e quindi lo inserisce nel widget.

Ho preso queste righe dallo QFile documentation.

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

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

La vostra funzione process_line dovrebbe essere simile a questo:

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++; 

Per ulteriori informazioni su QTableWidgets manipolare, controllare il documentation. Per i nuovi utenti che usano il builder della GUI in Qt Creator, è difficile capirlo all'inizio.

Eventualmente vorrei raccomandare di passare alla costruzione della GUI come fanno in tutto il loro examples ... aggiungendo tutto manualmente nel codice invece di trascinarlo e rilasciarlo.

-2

Siamo spiacenti ...

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); 
    }