2016-07-10 6 views
0

| Name | Math | Physics | Average grade |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |disable Bearbeitung und setItem auf mehrere Reihen in QTableWidget

  1. die Spalte "Mathematik" und "Physik" ist für die Benutzer um die Zahl einzugeben, die Spalte "Durchschnitt "KANN nicht Wert gesetzt werden, es ist nur für den Durchschnittswert nach Benutzer setzen" Mathe "und" Physik "Grad. Wie kann ich die Bearbeitung deaktivieren und trotzdem den berechneten Wert in der Spalte "Durchschnitt" anzeigen?

  2. Ich möchte Inhalt auf mehrere Zeilen schreiben, aber mein Code funktioniert nicht

    ui->tableWidget->setColumnCount(4); 
    ui->tableWidget->setRowCount(8); 
    ui->tableWidget->setSortingEnabled(false); 
    QTableWidgetItem *newItem = new QTableWidgetItem(tr("Hello World")); 
    for (int i=0; i< ui->tableWidget->rowCount(); i++) 
        ui->tableWidget->setItem(i, 0, newItem); 
    

Es ist eine Nachricht, wie diese

QTableWidget: cannot insert an item that is already owned by another QTableWidget 

Ich verstehe immer noch nicht, weil Ich bin ein Neuling mit QT. Bitte hilf mir, vielen Dank! :)

-Code aktualisiert:

for (int i = 0; i < ui.tableWidget->rowCount(); i++) { 
    QTableWidgetItem *icon_item = new QTableWidgetItem; 
    QIcon icon(":/myproject/icon/test.png"); 
    icon_item->setIcon(icon); 
    ui.tableWidget->setItem(i, 0, icon_item); 
} 

for (int j = 0; j < ui.tableWidget->rowCount(); j++) { 
    ui.tableWidget->item(j, 3)->setFlags(ui.tableWidget->item(j, 3)->flags() & ~Qt::ItemIsEditable); 
} 

Antwort

2
  1. Sie QTableWidgetItem::setFlags() verwenden können. Um die anderen Standard Flaggen zu halten, aber entfernen Qt::ItemIsEditable:

    item->setFlags(item->flags() & ~Qt::ItemIsEditable); 
    
  2. Sie können nicht die gleiche QTableWidgetItem Instanz auf mehrere Zellen eingestellt. Um Ihnen den Einstieg:

    for (...) { 
        QTableWidgetItem *item = new QTableWidgetItem(...); 
        tableWidget->setItem(...); 
    } 
    
+0

Dank viel. Ihre 2. Lösung funktioniert gut für mich. Das erste funktioniert jedoch nicht, weil ich eine Zugriffsverletzung habe. Mein Code ist 'für (int i = 0; i rowCount(); i ++) { ui.tablewidget-> Element (i, 3) -> setFlags (ui.tablewidget-> item (i, 3) -> flags() & ~ Qt :: ItemIsEditable); } ' wenn ich debugge, wenn ich bis 4 ausführen, habe ich Zugriffsverletzung :( – gnase

+0

Dann dereferenzieren Sie wahrscheinlich einen Nullzeiger, weil SetItem() für diese Zelle/Spalte nicht aufgerufen wurde. – jpnurmi

+0

so was sollte ich Um dieses Problem zu vermeiden (tut mir leid, ich bin ein Neuling) – gnase