crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> QPushButton in editor
Vilgeforc
  опции профиля:
сообщение 19.2.2014, 16:39
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 12
Регистрация: 19.2.2014
Пользователь №: 4060

Спасибо сказали: 3 раз(а)




Репутация:   0  


Здравствуйте! Написал делегат наследуемый от QStyledItemDelegate. В качестве редактора свой виджет из 2х кнопок и текста. Как определить, в какой строке нажата кнопка?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 19.2.2014, 20:14
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Обрабатывай это в делегате, т.е. сигнал кнопки должен быть связан со слотом делегата, а он уже сможет отправить [самописанный] сигнал располагая данными о том, где он находится
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Vilgeforc
  опции профиля:
сообщение 19.2.2014, 20:34
Сообщение #3


Студент
*

Группа: Новичок
Сообщений: 12
Регистрация: 19.2.2014
Пользователь №: 4060

Спасибо сказали: 3 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 19.2.2014, 21:14) *
Обрабатывай это в делегате, т.е. сигнал кнопки должен быть связан со слотом делегата, а он уже сможет отправить [самописанный] сигнал располагая данными о том, где он находится


Спасибо за ответ. А как узнать в делегате, где он находится? Индекс же там обычно в виде параметра передается.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Анна
  опции профиля:
сообщение 21.2.2014, 9:53
Сообщение #4


Активный участник
***

Группа: Участник
Сообщений: 276
Регистрация: 22.5.2008
Из: Зеленоград
Пользователь №: 181

Спасибо сказали: 30 раз(а)




Репутация:   4  


Ну, так ведь в setEditorData() или createEditor() приходит индекс. Вы ведь наверняка перегружаете эти функции, вот там и сообщите виджету, для какого элемента он вызван.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Vilgeforc
  опции профиля:
сообщение 21.2.2014, 10:38
Сообщение #5


Студент
*

Группа: Новичок
Сообщений: 12
Регистрация: 19.2.2014
Пользователь №: 4060

Спасибо сказали: 3 раз(а)




Репутация:   0  


Цитата(Анна @ 21.2.2014, 10:53) *
Ну, так ведь в setEditorData() или createEditor() приходит индекс. Вы ведь наверняка перегружаете эти функции, вот там и сообщите виджету, для какого элемента он вызван.


Дело в том, что редактор открыт у всех ячеек постоянно через listView->openPersistentEditor( myModel.index(i, 0, QModelIndex()) ); А назначение одной из кнопок - удаление элемента. Вот и получается, что если при создании сообщать виджету индекс, то при удалении элемента прийдется вручную пробегать по всем следующим элементам и эти индексы менять. Хотелось избежать такого. Видимо прийдется использовать ключ, связанный с самими данными(
Ну или в ручную отрисовывать. Думал можно это более прямо реализовать.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Анна
  опции профиля:
сообщение 24.2.2014, 11:39
Сообщение #6


Активный участник
***

Группа: Участник
Сообщений: 276
Регистрация: 22.5.2008
Из: Зеленоград
Пользователь №: 181

Спасибо сказали: 30 раз(а)




Репутация:   4  


Эту проблему можно обойти, получив по индексу QPersistentModelIndex. Этот индекс, насколько я помню, остаётся валидным при удалении предшествующих элементов. Во всяком случае, я именно его использовала для удаления нескольких итемов из модели.
Попробуйте, отпишитесь, если получится.

Сообщение отредактировал Анна - 24.2.2014, 11:42
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 24.4.2024, 4:59