QTableWidget редактирует только один столбец, а остальные оставить недоступными для редактирования

В QT 4.7 я пытаюсь сделать один QTableWidgetItem в редактируемом QTableWidget, а остальные все столбцы должны быть доступны только для чтения. У меня здесь проблемы.

Я проверил несколько образцов через Google и stackoverflow, но мне не удалось этого добиться. Вот некоторые из вариантов, которые я пробовал:

Я создаю строки, вызывая insertRow (rownumber) для добавления строк.

  1. Испытание 1. Я делаю следующее, динамически вставляя строку.

    • Enable Edit triggers in the UI Dialog
    • Добавьте столбцы, используя следующий код для отключения редактирования

      QTableWidgetItem qit(""); qit.setflags(qit.flags() & ~Qt::ItemIsEditable) qtable.setitem(row,column, &qit);

    • А для других столбцов я не устанавливаю флаги

    Этот подход, описанный выше, не сработал. Я могу редактировать все столбцы (даже тот, который я отключил от редактируемой опции)

  2. Испытание 2: проделайте все вышеперечисленное с помощью всего qtable.setEditTriggers(Qt::NoEditTriggers), а затем установите редактируемые столбцы там, где это необходимо.

    Но этот параметр делает все столбцы недоступными для редактирования.

Но я не вижу, чтобы кто-то так жаловался ни на одном форуме. Так что я, должно быть, совершаю какую-то глупую ошибку.

Кто-нибудь сталкивался с такой проблемой, если да, помогите, ответив.


person Muthu    schedule 30.09.2013    source источник


Ответы (1)


Рабочий пример QTableWidget

Первый элемент в добавленной строке доступен для редактирования, второй - для редактирования.

#include <QtGui>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    // Prepare layout
    QMainWindow *window = new QMainWindow;
    QTableWidget *tablewidget = new QTableWidget;
    window->setCentralWidget(tablewidget);

    // Add data
    tablewidget->insertRow(0);
    tablewidget->insertColumn(0);
    tablewidget->insertColumn(1);

    QTableWidgetItem *item;
    item = new QTableWidgetItem("editable");
    tablewidget->setItem(0,0,item);

    item = new QTableWidgetItem("non editable");
    item->setFlags(item->flags() & ~Qt::ItemIsEditable); // non editable
    tablewidget->setItem(0,1,item);

    window->show();
    return a.exec();
}
person fbucek    schedule 30.09.2013