2012-05-15 8 views
5

Jestem nowy na Qt i potrzebują pomocy z następujących czynności:wypełniania tabeli widget z pliku tekstowego w Qt

Chciałbym stworzyć GUI zawierający widget tabeli, która jest zamieszkana przez informacji pochodzących ze znakami tabulacji plik tekstowy. W moim GUI użytkownik najpierw szuka pliku tekstowego, a następnie wyświetli zawartość w Widgetie tabeli. Zrobiłem część przeglądania, ale w jaki sposób mogę załadować dane z pliku tekstowego do Widżetu tabeli?

+0

To pytanie jest dość niejasne, używasz MVC lub 'tradycyjnych' widżety? Widżet tabeli ma postać 2D, więc w jaki sposób tekst zostanie umieszczony w tabeli? – cmannett85

+0

W Qt Creator znajduje się kontrolka GUI o nazwie Table Widget, której używam. Myślałem, że to pytanie jest proste. Chcę wypełnić tabelę w moim GUI z tekstem rozdzielanym tabulatorami jako źródłem danych. Jeśli korzystasz z Widżetu tabeli, nie jest to najlepsze podejście, to jestem otwarty na inne sugestie. Jak już wspomniałem, jestem nowy w Qt. –

+0

Dobrze 'QTableWidget' jest najlepszą opcją, jeśli chcesz wyświetlać tylko tekst, w siatce 2D, bez udostępniania danych z innymi widżetami. Otrzymasz również lepszą odpowiedź, jeśli zadałeś tylko jedno pytanie w poście: ładowanie pliku tekstowego, parsowanie go w oddzielne ciągi, a następnie popychanie do widżetu tabeli; są trzy bardzo różne procesy, i będę zaskoczony, jeśli każdy z nich nie zostanie wyjaśniony na tej stronie lub w dokumentach. – cmannett85

Odpowiedz

8

To dwa kroki, sparsuj plik, a następnie wciśnij go do widżetu.

Złapałem te linie od QFile documentation.

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

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

Twoja funkcja process_line powinna wyglądać następująco:

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

Aby uzyskać więcej informacji na temat manipulowania QTableWidgets sprawdzić documentation. Dla nowych użytkowników korzystających z kreatora GUI w Qt Creator, na początku jest to trudne.

Ostatecznie, chciałbym polecić przejście do budowania GUI w taki sposób, jak robią to w swoim examples ... dodając wszystko ręcznie w kodzie zamiast przeciągania i upuszczania.

-2

Niestety ...

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