wake-up-neo.net

Wie mache ich eine Spalte in QTableWidget nur lesbar?

Ich hätte gerne eine Spalte in QTableWidgetNICHTeditierbar.
In Foren habe ich viel über einige flags gelesen, konnte diese aber nicht implementieren.

55
Narek

Fügen Sie folgende Arten von Elementen in das QTableWidget ein:

QTableWidgetItem *item = new QTableWidgetItem();
item->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);

Funktioniert gut!

BEARBEITEN:

QTableWidgetItem *item = new QTableWidgetItem();
item->setFlags(item->flags() ^ Qt::ItemIsEditable);

Dies ist eine bessere Lösung. Danke an @priomsrb.

85
Narek

Das Ergebnis der Verwendung von XOR hängt davon ab, wie der aktuelle Status ist. Ich würde vorschlagen, verwenden

item->setFlags(item->flags() &  ~Qt::ItemIsEditable);

um sicherzustellen, dass die Bearbeitung unabhängig von der aktuellen Einstellung deaktiviert ist.

34
user2923436

Ich kam zu einem besseren Vorschlag, überschreiben Sie einfach das cellDoubleClicked-Signal mit einem neuen SLOT .. _, wenn Sie keine der Zellen ändern möchten

1
Damdidam

Um den Code von @ Narek auf Zeilen oder Spalten anzuwenden, verwenden Sie einfach eine einfache for-Schleife und geben Sie eine Bedingung ein, um die Flags für Zeilen/Spalten aufzunehmen, die nicht bearbeitet werden können. 

Der folgende Code liest eine CSV-Datei in ein QTableWidget:

if(!rowOfData.isEmpty()){
for (int x = 0; x < rowOfData.size(); x++)
    {
        rowData = rowOfData.at(x).split(",");
        if(ui->table_Data->rowCount() <= x) ui->table_Data->insertRow(x);
        for (int y = 0; y < rowData.size(); y++)
        {
            QTableWidgetItem *item = new QTableWidgetItem(rowData[y],QTableWidgetItem::Type);
            if( y < 3 ) item->setFlags(item->flags() ^ Qt::ItemIsEditable);   // Only disables the first three columns for editing, but allows the rest of the columns to be edited
            ui->table_Data->setItem(x,y,item);
            ui->table_Data->repaint();
        }
    }
}
0
Tim Hutchison