crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Отображение виджета в режиме просмотра таблицы
DarkAngel
  опции профиля:
сообщение 13.7.2009, 13:38
Сообщение #1


Студент
*

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

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




Репутация:   0  


Приветствую!
В Qt я пока еще новчек, поэтому если решение тривиально, то прошу направить меня в соответствующий раздел справки :)
Суть такова: есть tableView, столбцы которого - стандартные виджеты(QComboBox, QDateEdit, QSpinBox... etc). Естественно, используется паттерн Model/View. Но вся загвоздка, для меня, состоит в том, что один из столбцов должен содержать виджеты-гиперссылки(с этм проблем нет), которые отображались бы(и, конечно, реагировали на действия ползователя) в режиме просмотра таблицы. В режиме же редактиирования, эти ячейки должны быть пустыми(без виджета). Возможно ли это реализовать?

офф: снесите дубль, плиз. инет глюканул...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 13.7.2009, 16:09
Сообщение #2


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

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

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




Репутация:   94  


Цитата(DarkAngel @ 13.7.2009, 17:38) *
Возможно ли это реализовать?
да, нужно написать собственный делегат.
Смотри Асистент о Делегатах.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DarkAngel
  опции профиля:
сообщение 15.7.2009, 17:19
Сообщение #3


Студент
*

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

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




Репутация:   0  


Litkevich Yuriy, Не мог бы ты немного уточнить, а то я что-то нифига не нарыл :unknw:

Мне думаетья, что в createEditor(), моего делегата, необходимо как-то узнавать роль(DisplayRole, EditRole), в зависимости от которойй и возвращать нужный эдитор. Или я не прав?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 15.7.2009, 17:51
Сообщение #4


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

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

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




Репутация:   94  


Цитата(DarkAngel @ 15.7.2009, 21:19) *
Мне думаетья, что в createEditor(),
эта функция создаёт виджет-редактор, он используется для редактирования данных находящихся в модели.
А тебе нужно
Цитата(DarkAngel @ 13.7.2009, 17:38) *
должен содержать виджеты-гиперссылки(с этм проблем нет), которые отображались бы(и, конечно, реагировали на действия ползователя) в режиме просмотра таблицы.
Т.е.
1) в ячейке нужно нарисовать текст с подчёркиванием и синим шрифтом (так возникает асоциация ссылки у пользователя)
2) Если ссылки должны быть активными, то при одинарном щелчке на ячейку нужно посылать сигнал с параметром-строкой равным ссылке.

1) реализуется в функции делегата QItemDelegate::drawDisplay
2) я думаю можно сделать наследника от представления, где будет обрабатываться событие "щелчёк мышью" и когда этот щелчёк был там где нужно посылать сигнал.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DarkAngel
  опции профиля:
сообщение 15.7.2009, 18:17
Сообщение #5


Студент
*

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

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




Репутация:   0  


Цитата(Litkevich Yuriy @ 15.7.2009, 18:51) *
реализуется в функции делегата QItemDelegate::drawDisplay

Только так? Просто хотелось бы реализовать этот виджет самостоятельным - с отрисовкой и с обработкой событий, а не обрабатывать события представления. Мне кажется, что это было бы более логичным
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 15.7.2009, 18:35
Сообщение #6


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

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

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




Репутация:   94  


Цитата(DarkAngel @ 15.7.2009, 22:17) *
реализовать этот виджет самостоятельным
во-первых, не виджет, а делегат. Это важно понимать!

во-вторых,
Цитата(DarkAngel @ 15.7.2009, 22:17) *
а не обрабатывать события представления.
я не знаю, возможно ли обрабатывать события щелчка по делегату в самом делегате. Как-то вопрос такой не возникал, надо асистент почитать.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DarkAngel
  опции профиля:
сообщение 15.7.2009, 18:58
Сообщение #7


Студент
*

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

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




Репутация:   0  


Цитата(Litkevich Yuriy @ 15.7.2009, 19:35) *
во-первых, не виджет, а делегат. Это важно понимать!

Я это пониммаю :) Может быть, я не правильно выразился - сорри.

Я бы хотел создать виджет "гиперссылка", который и занимался бы своей отрисовкой и обработкой событий, а делегат создавал и предоставлял бы этот виджет представлению, подобно тому как это делаеться в createEditor() при редактивании
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 15.7.2009, 19:51
Сообщение #8


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

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

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




Репутация:   94  


представление в своём методе paintEvent() вызывает метод paint() делегата, а в нём:
...
    drawBackground(painter, opt, index);
    drawCheck(painter, opt, checkRect, checkState);
    drawDecoration(painter, opt, decorationRect, pixmap);
    drawDisplay(painter, opt, displayRect, text);
    drawFocus(painter, opt, displayRect);
...
Т.е. рисованием (например, ячейки в таблице) занимается делегат, а не виджет-редактор.

Делегат, так как является наследником QObject, а не QWidget, не имеет событий связанных с щелчком мышкой, во всяком случае явно.

Если исхитрится в делегате установить фильтр событий для представления, тогда можно в делегате всю работу и провернуть.

Вот только пока не понял ,как получить указатель на представление, в случае если делегат конструируется с нулевым родителем.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 27.9.2020, 18:24