How to make a column in QTableWidget read only?

前端 未结 4 784
情深已故
情深已故 2020-11-30 01:30

I would like to have one column in QTableWidget NOT editable.
In forums I have read a lot about some flags but could not manage to imp

相关标签:
4条回答
  • 2020-11-30 02:06

    To apply @Narek's code to rows or columns, simply use a simple for loop and put a condition in to include the flags for rows/columns you do not want to be editable.

    The following code reads a csv file into a 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 讨论(0)
  • 2020-11-30 02:12

    The result of using XOR depends on what the current state is. I'd suggest using

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

    to make sure editing is turned off regardless of the current setting.

    0 讨论(0)
  • 2020-11-30 02:17

    I came to a better suggestion, just overwrite the cellDoubleClicked signal with a new SLOT. This is, if you want none of the cells to be modified

    0 讨论(0)
  • 2020-11-30 02:20

    Insert into the QTableWidget following kind of items:

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

    Works fine!

    EDIT:

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

    This is a better solution. Thanks to @priomsrb.

    0 讨论(0)
提交回复
热议问题