Название: QTreeWidget: как запретить редактирование в отдельной колонке? Отправлено: Mike-Aiki от Июль 25, 2012, 16:00 Собственно, есть TreeWidget c 2-мя колонками, создаётся несколько items типа QTreeWidgetItem, для 2-й колонки устанавливается делегат для ввода значений с помощью комбобокса. Всё работает, но мне не нужно редактировать значения в 1-й колонке. Ведь разрешение редактирования распространяется на всю строку ( item->setFlags(Qt::ItemIsEditable|Qt::ItemIsEnabled ). Что-то никак не могу понять, как запретить редактирование в отдельной колонке...
Название: Re: QTreeWidget: как запретить редактирование в отдельной колонке? Отправлено: ruzik от Июль 25, 2012, 17:20 Подобный код должен распространятся на item к которому он был применен, а не на всю строку:
item->setFlags(Qt::ItemIsEditable|Qt::ItemIsEnabled) То есть остается лишь циклом пройтись. Название: Re: QTreeWidget: как запретить редактирование в отдельной колонке? Отправлено: Mike-Aiki от Июль 25, 2012, 18:57 Ну как же:
"Rows usually contain several columns of data, each of which can contain a text label and an icon". То есть, насколько я понимаю, item - и есть строка, которая может содержать несколько столбцов. Код: Код: for(int i=0; i<6; ++i) { Один item на строку... Название: Re: QTreeWidget: как запретить редактирование в отдельной колонке? Отправлено: Alex Custov от Июль 25, 2012, 19:01 Задать делегат на колонку. У тебя судя по всему он уже есть, нужно просто его дописать.
Код
Название: Re: QTreeWidget: как запретить редактирование в отдельной колонке? Отправлено: Mike-Aiki от Июль 25, 2012, 19:31 О, спасибо, работает! Я, признаться, уже подумывал о "пустом" делегате, но ты меня опередил. ;) Добавил твой делегат для колонки 0. Кстати, интересно применение макроса Q_UNUSED(). И вообще, просматривая исходники, я обратил внимание на большое кол-во макросов, которые в известной литературе по Qt как-то обходят стороной...
Однако, IMHO, всё-таки этот метод какой-то извратный... ;D Не проще ли было использовать какой-нибудь флажок, типа - разрешить/запретить редактирование в колонке... Название: Re: QTreeWidget: как запретить редактирование в отдельной колонке? Отправлено: ruzik от Июль 25, 2012, 21:07 Цитировать "Rows usually contain several columns of data, each of which can contain a text label and an icon". То есть, насколько я понимаю, item - и есть строка, которая может содержать несколько столбцов. Вы не правы это переводиться как: Строки обычно содержат несколько столбцов данных, каждый из которых может содержать текст и иконки.К тому же у QTableWidgetItem есть методы row() и column(), то есть item - именно элемент со своим значением строки и столбца. Насколько я могу судить, проблема в это флаге: Qt::ItemIsEditable, который значит что item можно редактировать, попробуйте так: Код: for(int i=0; i<6; ++i) { Название: Re: QTreeWidget: как запретить редактирование в отдельной колонке? Отправлено: Mike-Aiki от Июль 25, 2012, 21:21 Собственно, я не переводил буквально. ;) Суть в том, что одна строка (item) может содержать несколько столбцов, и флаги в setFlags() действуют на все столбцы в строке. Поэтому Alex Custov и предложил использовать "нередактируемый" делегат.
Впрочем, попробовал и Ваш вариант - как следовало ожидать, перестали редактироваться значения во всех столбцах. ;) |