Domanda

Mi piacerebbe avere una colonna in QTableWidget non modificabile.
Nel forum ho letto molto su alcuni flags ma non riuscivo a realizzare.

È stato utile?

Soluzione

Inserisci nel QTableWidget seguenti tipi di oggetti:

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

funziona bene!

EDIT:

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

Questa è una soluzione migliore. Grazie a @priomsrb.

Altri suggerimenti

Il risultato di utilizzando XOR dipende da ciò che allo stato attuale è. Io suggerirei usando

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

per assicurarsi che la modifica sia spento indipendentemente dall'impostazione corrente.

Sono venuto a un suggerimento migliore, basta sovrascrivere il segnale cellDoubleClicked con un nuovo slot. Questo è, se si desidera che nessuna delle celle da modificare

Per applicare @ codice di Narek a righe o colonne, è sufficiente utilizzare un semplice ciclo for e mettere una condizione per includere le bandiere per righe / colonne che non si desidera essere modificabile.

Il codice seguente legge un file CSV in un 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();
        }
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top