Russian Qt Forum
Ноябрь 24, 2024, 13:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt [4.x.x] QPropertyEditor::редактирование ячейки  (Прочитано 4988 раз)
vregess
Гость
« : Апрель 25, 2007, 09:12 »

Копаюсь в исходниках Qt Designer и никак не могу понять, каким образом в компоненте PropertyEditor вызывается редактор ячейки.:evil:
Смотрел в Value Browser - там через openPresitentEditor сделано.
А в дезайнере как-то по другому.
Никто не ткнет носом
Записан
noosooth
Гость
« Ответ #1 : Апрель 25, 2007, 12:27 »

Дык в PropertyEditor (файл propertyeditor.h) есть указатель на QPropertyEditor
А сам QPropertyEditor (потомок QTreeView) живет в файлах: qpropertyeditor.h + qpropertyeditor.cpp.

А он в свою очередь пользуется классами QPropertyEditorModel и QPropertyEditorDelegate ( qpropertyeditor_delegate_p.h, qpropertyeditor_model_p.h)

Вот через свою модель и делегаты все это дело и работает.

Упс. Просмотрел, что в названии темы фигурирует QPropertyEditor.
А в теле сообщения про PropertyEditor спрашивается.
О каком классе идет речь?
Записан
vregess
Гость
« Ответ #2 : Апрель 25, 2007, 14:08 »

Цитата: "noosooth"

Упс. Просмотрел, что в названии темы фигурирует QPropertyEditor.
А в теле сообщения про PropertyEditor спрашивается.
О каком классе идет речь?


Речь идет о классе QPropertyEditor.
Вот ты говоришь, "через свою модель и делегаты". Ткни пальцем на то место, где реализовано открытие редактора ячейки. Модель тут, видимо, не причем. Это реализовано либо в QPropertyEditor, либо в делегате...
Хотя нет, ето ДОЛЖНО БЫТЬ реализовано в QPropertyEditor. Но где это я чет не врубаюсь. Как они, гады, это сделали...
У меня только одна мысль пока: в методе QPropertyEditor::setInitialInput выставляются EditTriggers, типа при тыканьи на итем или изменение текущего итема на другой, вызывается редактор. Таким образом редактор можно вызвать если программно изменить, например, фокус(поставить его на другой итем), тогда вызовется редактор ячейки... Новся загвоздка в том, что фокус в дереве расположен всегда в первом столбце, а он не редактируемый. Нужно значит поменять фокус на второй столбец текущей строки - тогда будет редактироваться. Но я не нашел подобного кода здесь. Вот и ломаю голову.
Записан
noosooth
Гость
« Ответ #3 : Апрель 25, 2007, 17:48 »

Цитата: "vregess"
Вот ты говоришь, "через свою модель и делегаты". Ткни пальцем на то место, где реализовано открытие редактора ячейки. Модель тут, видимо, не причем. Это реализовано либо в QPropertyEditor, либо в делегате...


Не вопрос Улыбающийся

Вы все правильно понимаете насчёт setEditTriggers().
А насчет того, что первый столбец нередактируемый + автоматом вызывается редактор во втором столбце (при  активации первого) так это вот здесь:
Код:

//Qt 4.2.3, qpropertyeditor_model.cpp, line: 181

QModelIndex QPropertyEditorModel::buddy(const QModelIndex &index) const
{
    if (index.column() == 0)
        return createIndex(index.row(), 1, index.internalPointer());

    return index;
}


А вот чему нас учит партия и правительство:
Цитировать

QModelIndex QAbstractItemModel::buddy ( const QModelIndex & index ) const  [virtual]

Returns a model index for the buddy of the item represented by index. When the user wants to edit an item, the view will call this function to check whether another item in the model should be edited instead, and construct a delegate using the model index returned by the buddy item.
In the default implementation each item is its own buddy.
Записан
vregess
Гость
« Ответ #4 : Апрель 25, 2007, 19:20 »

Цитата: "noosooth"

Код:

Qt 4.2.3, qpropertyeditor_model.cpp, line: 181 .....



Балин. Смотрел на этот метод и значения ему не придал... хе, думал это какой-нить приват метод для личных целей... А в доке его не встречал...
Да уж, плохо смотрел.

Спасибо. С меня пиво.
Теперь можно спокойно спать.
Клево все-таки тролли кодят...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.045 секунд. Запросов: 20.