Отображение виджета в режиме просмотра таблицы |
Здравствуйте, гость ( Вход | Регистрация )
Отображение виджета в режиме просмотра таблицы |
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
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
DarkAngel |
15.7.2009, 17:19
Сообщение
#3
|
Студент Группа: Новичок Сообщений: 12 Регистрация: 13.7.2009 Пользователь №: 903 Спасибо сказали: 0 раз(а) Репутация: 0 |
Litkevich Yuriy, Не мог бы ты немного уточнить, а то я что-то нифига не нарыл
Мне думаетья, что в createEditor(), моего делегата, необходимо как-то узнавать роль(DisplayRole, EditRole), в зависимости от которойй и возвращать нужный эдитор. Или я не прав? |
|
|
Litkevich Yuriy |
15.7.2009, 17:51
Сообщение
#4
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Мне думаетья, что в createEditor(), эта функция создаёт виджет-редактор, он используется для редактирования данных находящихся в модели.А тебе нужно должен содержать виджеты-гиперссылки(с этм проблем нет), которые отображались бы(и, конечно, реагировали на действия ползователя) в режиме просмотра таблицы. Т.е.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:35
Сообщение
#6
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
реализовать этот виджет самостоятельным во-первых, не виджет, а делегат. Это важно понимать!во-вторых, а не обрабатывать события представления. я не знаю, возможно ли обрабатывать события щелчка по делегату в самом делегате. Как-то вопрос такой не возникал, надо асистент почитать.
|
|
|
DarkAngel |
15.7.2009, 18:58
Сообщение
#7
|
Студент Группа: Новичок Сообщений: 12 Регистрация: 13.7.2009 Пользователь №: 903 Спасибо сказали: 0 раз(а) Репутация: 0 |
во-первых, не виджет, а делегат. Это важно понимать! Я это пониммаю Может быть, я не правильно выразился - сорри. Я бы хотел создать виджет "гиперссылка", который и занимался бы своей отрисовкой и обработкой событий, а делегат создавал и предоставлял бы этот виджет представлению, подобно тому как это делаеться в createEditor() при редактивании |
|
|
Litkevich Yuriy |
15.7.2009, 19:51
Сообщение
#8
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
представление в своём методе paintEvent() вызывает метод paint() делегата, а в нём:
Т.е. рисованием (например, ячейки в таблице) занимается делегат, а не виджет-редактор.Делегат, так как является наследником QObject, а не QWidget, не имеет событий связанных с щелчком мышкой, во всяком случае явно. Если исхитрится в делегате установить фильтр событий для представления, тогда можно в делегате всю работу и провернуть. Вот только пока не понял ,как получить указатель на представление, в случае если делегат конструируется с нулевым родителем. |
|
|
Текстовая версия | Сейчас: 28.12.2024, 8:22 |