2016-05-10 12 views
0

Ich habe an einem Matrix-Rechner in Qt gearbeitet und folgendes Problem festgestellt. Ich mache das:C++ Qt - Einstellen der QTableWidget Elemente Werte

void ShowMatrix::updateTable() 
{ 
    int w = 323 - 305; 
    int h = 300 - 227 + 15; 

    for(int i = 0; i < matrix->getRows(); i++) 
    { 
     ui->tableWidget->insertRow(i); 
     h += 35; 
    } 
    for(int j = 0; j < matrix->getColumns(); j++) 
    { 
     ui->tableWidget->insertColumn(j); 
     w += 50; 
    } 

    this->resize(w, h); 
    this->setMinimumSize(w, h); 

    ui->retranslateUi(this); 


    this->setWindowTitle(matrix->getName()); 
    emit updatingDone(); 

} 

Und danach, wenn updateDone(); Signal wird emittiert, dieser Steckplatz wird gestartet:

void ShowMatrix::setValues() 
{ 
    QString str; 
    for(int i = 0; i < matrix->getRows(); i++) 
     for(int j = 0; j < matrix->getColumns(); j++) 
     { 
      ui->tableWidget->item(i, j)->setText("1"); 
     } 
    ui->retranslateUi(this); 
} 

Ich möchte nur alle Zellenwerte zu Einsen setzen. Ich kann nichts mit Gegenständen machen, alles, was ich mit ihnen machen will, wie das Setzen von Flaggen, Werten usw. stürzt meine Anwendung ab. Wenn ich kein updatingDone() Signal aussende, funktioniert alles gut.

Antwort

1

Sie können versuchen, diesen Slot zu verwenden:

void ShowMatrix::setValues() 
{ 
    QString str; 
    for(int i = 0; i < matrix->getRows(); i++) 
     for(int j = 0; j < matrix->getColumns(); j++) 
     { 
      QTableWidgetItem *item = ui->tableWidget->item(i, j); 
      if(!item) { 
       item = new QTableWidgetItem(); 
       ui->tableWidget->setItem(i, j, item); 
      } 
      item->setText("1"); 
     } 
    ui->retranslateUi(this); 
} 

Also, wenn Sie neue Zeile und/oder Spalte Tabelle Widget hinzufügen, sind solche hinzugefügt Zelle (n) noch null. Daher müssen Sie zuerst QTableWidgetItem in diese Zellen setzen, indem Sie QTableWidget-> setItem verwenden.

+0

Alle Zeilen und Spalten werden korrekt hinzugefügt. Ich benutze rowcount nicht, aber matrix-> getRows() gibt 0 nicht sicher zurück. Wie soll ich wissen? Weil es das QTableWidget mit allen Spalten und Zeilen korrekt generiert, aber sie sind leer. Wenn ich diese Zeile kommentiere: ui-> tableWidget-> item (i, j) -> setText ("1"); alles funktioniert gut, aber Felder sind leer. – MindRoller

+1

Also ignorieren Sie die updateTable oben und bitte versuchen Sie meinen Slot – Apin

+0

Ok ich habe Ihre Lösung versucht und es funktioniert, aber können Sie erklären, warum? Wie gesagt, Zeilen und Spalten wurden korrekt erstellt, ich konnte keine Werte festlegen. Ich verstehe nicht, warum es so nicht funktioniert – MindRoller

Verwandte Themen