Как сделать столбец в QTableWidget только для чтения?

Я хотел бы иметь один столбец в QTableWidget НЕ редактируемый.
На форумах я много читал о некоторых flags, но не смог реализовать.

47
04 апр. '10 в 13:09
источник поделиться
4 ответов

Вставьте в QTableWidget следующие виды элементов:

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

Прекрасно работает!

EDIT:

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

Это лучшее решение. Благодаря @priomsrb.

76
04 апр. '10 в 13:12
источник

Связанные вопросы


Похожие вопросы

Результат использования XOR зависит от текущего состояния. Я бы предложил использовать

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

чтобы убедиться, что редактирование отключено независимо от текущей настройки.

24
26 окт. '13 в 20:14
источник

Чтобы применить код @Narek к строкам или столбцам, просто используйте простой цикл for и поставьте условие для включения флагов для строк/столбцов, которые вы не хотите редактировать.

Следующий код считывает файл csv в 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
16 июня '14 в 22:56
источник

Я пришел к лучшему предложению, просто заменил сигнал cellDoubleClicked новым SLOT. Это означает, что если вы хотите, чтобы ни одна из камер не была изменена

0
30 июля '14 в 16:50
источник

Посмотрите другие вопросы по меткам или Задайте вопрос