![]() |
|
|
![]()
|
|
| loneybibi |
|
|||
|
Любитель ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 28.5.2010 Где: Донецк (Украина) Репутация: 3 Всего: 3 |
Доброго времени дня!
В таблице есть три столбца, для отображения ее использую QSqlTableModel и QTableView. Допустим первый из них может иметь числовое значение от 1 до 3. Как сделать так чтоб для пользователя вместо цифр отображались текстовые значения? Заранее спасибо за ответы! -------------------- Red Hat Fedora 17 Qt 4.8.1 (x64), GCC 4.4.3, G++ 4.4.3, QtCreator 2.4.1 |
|||
|
||||
| loneybibi |
|
|||
|
Любитель ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 28.5.2010 Где: Донецк (Украина) Репутация: 3 Всего: 3 |
У меня получилось вот так с помощью делегатов:
Есть ли еще какие то варианты ? -------------------- Red Hat Fedora 17 Qt 4.8.1 (x64), GCC 4.4.3, G++ 4.4.3, QtCreator 2.4.1 |
|||
|
||||
| loneybibi |
|
|||
|
Любитель ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 28.5.2010 Где: Донецк (Украина) Репутация: 3 Всего: 3 |
Иного приемлемого варианта как выше описанного я не нашел.
Появился другой вопрос! Как узнать и передать номер или название колонки таблицы делегату? Ну или как из класса делегата узнать к какой колонке он применяется? Я думаю что нужно будет в классе QTableView переопределять функцию какую то, но какую не знаю. Или может есть другие варианты? А то не хотелось бы писать делегат для каждой колонки, а просто подставлять нужные значения в зависимости от номера или имени колонки. -------------------- Red Hat Fedora 17 Qt 4.8.1 (x64), GCC 4.4.3, G++ 4.4.3, QtCreator 2.4.1 |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
Вообще-то это обычно решается doc.qt.nokia.com/4.8-snapshot/qsqlrelationaltablemodel.html
Или doc.qt.nokia.com/4.8-snapshot/qsqlrelationaldelegate.html -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| loneybibi |
|
|||
|
Любитель ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 28.5.2010 Где: Донецк (Украина) Репутация: 3 Всего: 3 |
Да я как бы уже о другом с QSqlRelationTableModel все понятно.
Мне нужно знать к индекс ячейки в таблице конкретно к которой сейчас применяется делегат. Вот в методе "QStyledItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const" есть index у которого есть свойство column. Но как его передать в метод displayText или где его взять внутри метода displayText ? -------------------- Red Hat Fedora 17 Qt 4.8.1 (x64), GCC 4.4.3, G++ 4.4.3, QtCreator 2.4.1 |
|||
|
||||
| spyswamp |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 349 Регистрация: 18.8.2006 Репутация: 1 Всего: 7 |
Все же просто:
Только твой делегат нужно поправить так:
Таким образом, если ты создаешь именно делегата для колонки, то и будешь записывать в него колонку. Для строк есть функция установки делегата QAbstractItemView::setItemDelegateForRow(). А вот для делегатов ячеек уже придется извращаться. Но, как я понял, вариант для колонок тебя вполне устроит. -------------------- - why you call it beta? - cuz it's betta then nothin' |
||||
|
|||||
| loneybibi |
|
|||
|
Любитель ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 28.5.2010 Где: Донецк (Украина) Репутация: 3 Всего: 3 |
Да так то понятно если делать таким способом то и проблем то не возникает. Но это надо для каждой колонки назначать делегат и отправлять ему номер колонки к которой он применяется. А если делать так:
QTableView::setItemDelegate(new mDelegate); т.е. назначить один делегат сразу для всех колонок, а уже потом внутри самого класса делегата разбираться к чему он там применяется и тд. Почти так же так как описано вами я и сделал сейчас, все работает, но это как промежуточный вариант. Но на мой взгляд это чуток не правильно что ли... Должен же быть в QStyleItemDelegate метод чтоб узнать к какой ячейке он относится и в методе paint он есть. Но в методе displayText я его не нашел. А мне то и надо всего сменить текст отображения при определенном числовом значении ячейки в зависимости от номера колонки. Это сообщение отредактировал(а) loneybibi - 17.1.2012, 17:35 -------------------- Red Hat Fedora 17 Qt 4.8.1 (x64), GCC 4.4.3, G++ 4.4.3, QtCreator 2.4.1 |
|||
|
||||
| spyswamp |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 349 Регистрация: 18.8.2006 Репутация: 1 Всего: 7 |
Дело в том, что для этих вещей displayText() никак не подходит, потому что эта функция вызывается для роли модели Qt::DisplayRole. Тебе требуется перезагрузить setModelData(). Поиграйся с ней - она и модель знает, и индекс.
-------------------- - why you call it beta? - cuz it's betta then nothin' |
|||
|
||||
| spyswamp |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 349 Регистрация: 18.8.2006 Репутация: 1 Всего: 7 |
Кстати, еще такая ситуация: можешь использовать свою модель. Отнаследуй ее от используемой и перезагрузи функцию data(). Будешь там выводить то, что тебе надо на Qt::DisplayRole.
-------------------- - why you call it beta? - cuz it's betta then nothin' |
|||
|
||||
| loneybibi |
|
|||
|
Любитель ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 28.5.2010 Где: Донецк (Украина) Репутация: 3 Всего: 3 |
Попробовал в методе paint! Вроде все то что надо получилось но вот рисует он текст не так как это делает таблица а чуть выше и левее (рисунок ниже прикрепил), хотя rect передал. Кто подскажет как это исправить?
Попробую поиграть с setDataModel. >_< Это сообщение отредактировал(а) loneybibi - 17.1.2012, 18:58 Присоединённый файл ( Кол-во скачиваний: 4 )
image0.jpg 3,97 Kb-------------------- Red Hat Fedora 17 Qt 4.8.1 (x64), GCC 4.4.3, G++ 4.4.3, QtCreator 2.4.1 |
|||
|
||||
| loneybibi |
|
|||
|
Любитель ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 28.5.2010 Где: Донецк (Украина) Репутация: 3 Всего: 3 |
Дело в том что setModelData вызывается после редактирования ячейки. Поэтому это не подходит. (( -------------------- Red Hat Fedora 17 Qt 4.8.1 (x64), GCC 4.4.3, G++ 4.4.3, QtCreator 2.4.1 |
|||
|
||||
| spyswamp |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 349 Регистрация: 18.8.2006 Репутация: 1 Всего: 7 |
Тогда я за "отвиртуаливание" функции data() у модели для нужной роли. Делать такую логику в paint() - это, по-моему, полная жесть.
Добавлено через 59 секунд Модель - ЧТО отобразить. Делегат - КАК отобразить, КАК изменить. У тебя, есть подозрение, эти понятия попутались слегка. -------------------- - why you call it beta? - cuz it's betta then nothin' |
|||
|
||||
| _GRIN_ |
|
|||
![]() одинокий падаван ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 18.11.2007 Где: Калуга Репутация: 6 Всего: 7 |
Может быть проще сразу правильно запрос формировать, что бы он строку возвращал? http://darkraha.com/rus/sql/sql06.php -------------------- Дорогу осилит идущий |
|||
|
||||
| loneybibi |
|
|||
|
Любитель ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 28.5.2010 Где: Донецк (Украина) Репутация: 3 Всего: 3 |
Если бы все дело было в sql было бы проще.
Вопрос собственно о делегате ячейки. Предположим что данные берутся не из БД а из файла и заполняется таблица. -------------------- Red Hat Fedora 17 Qt 4.8.1 (x64), GCC 4.4.3, G++ 4.4.3, QtCreator 2.4.1 |
|||
|
||||
| spyswamp |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 349 Регистрация: 18.8.2006 Репутация: 1 Всего: 7 |
Модель пиши.
-------------------- - why you call it beta? - cuz it's betta then nothin' |
|||
|
||||
| loneybibi |
|
|||
|
Любитель ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 28.5.2010 Где: Донецк (Украина) Репутация: 3 Всего: 3 |
Неее хочу ! -------------------- Red Hat Fedora 17 Qt 4.8.1 (x64), GCC 4.4.3, G++ 4.4.3, QtCreator 2.4.1 |
|||
|
||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |