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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Постоянное отображение делегата QTableWidget  (Прочитано 6244 раз)
Andrew12
Гость
« : Декабрь 08, 2010, 22:27 »

Здравствуйте, многоуважаемый all.

Перерыл кучу материала и так и не нашел ответа на следующий вопрос:
1. Создаю QTableWidget
2. Создаю делегата-наследника QComboBox.
3. Модель ComboBox содержит поле name(название товара, строка, отображается), id(идентификатор, число, не отображается)

В модели QTableWidget должно храниться id, а показывать должно name, что и происходит при клике на контрол (отображается ComboBox).

Как сделать, чтоб ComboBox отображался постоянно?
Записан
crossly
Гость
« Ответ #1 : Декабрь 09, 2010, 10:02 »

переопределить у делегата метод paint ... и отрисовать комбобокс
Записан
brankovic
Гость
« Ответ #2 : Декабрь 20, 2010, 08:31 »

Метод openPersistentEditor делает такое. Имеется у QAbstractItemView, QTableWidget, QListWidget, QTreeWidget.
Записан
crossly
Гость
« Ответ #3 : Декабрь 20, 2010, 17:16 »

а тут стоит подумать.... держать в памяти кучу открытых эдиторов или все же просто отрисовать...
Записан
brankovic
Гость
« Ответ #4 : Декабрь 21, 2010, 12:46 »

а тут стоит подумать.... держать в памяти кучу открытых эдиторов или все же просто отрисовать...

А как это "просто отрисовать"? Имеется ввиду посмотреть на обычный комбо бокс и воссоздать его? Но это же очень громоздко, наверное (надо брать цвета от стилей, уметь его ресайзить и т.п.). Кьют только начал изучать и совсем недавно пытался такую задачу решить. Я так пробовал: чтобы самому не рисовать, cоздавал на лету комбо бокс и просил его отрендерится на qpainter. Ничего не вышло.

Есть ли простой способ его отрисовать?
Записан
Kolobok
Гость
« Ответ #5 : Декабрь 21, 2010, 12:49 »

Есть ли простой способ его отрисовать?

Посмотри описание QStyle
Записан
twp
Гость
« Ответ #6 : Декабрь 21, 2010, 17:31 »

а зачем отрисовывать именно комбобокс? неужели недостаточно просто отобразить name?
Записан
brankovic
Гость
« Ответ #7 : Декабрь 21, 2010, 17:59 »

а зачем отрисовывать именно комбобокс? неужели недостаточно просто отобразить name?

Если отрисовывать только name, то дефолтный делегат сам справится.

А отрисовывать, чтобы было сразу видно, что это комбобокс. В таблице есть комбобоксовые поля и обычные, нередактируемые.

На самом деле меня больше всего раздражает, что для выпадания комбобокса надо кликнуть 2 раза, тут отрисовка вообще ни при чём.
« Последнее редактирование: Декабрь 22, 2010, 13:10 от brankovic » Записан
twp
Гость
« Ответ #8 : Декабрь 21, 2010, 18:34 »

а зачем отрисовывать именно комбобокс? неужели недостаточно просто отобразить name?

Если отрисовывать только name, то дефолтный делегат сам справится.

А отрисовывать, чтобы было сразу видно, что это комбобокс. В таблице есть комбобоксовые поля и обычные, нередактируемые.

На самом деле меня больше всего раздражает, что для выпадания комбобокса надо кликнуть 2 раза, тут отрисовка вообще не причём.
ну если уж такая задача стоит то может поможет QPixmap::grabWidget с последующей отрисовкой полученого пискмапа. но имхо овчинка выделки не стоит - уж очень много накладных расходов - либо кэшировать пискмапы, либо делать это на лету при отрисовке что приведет к большим тормозам для больших объемов данных.
Записан
crossly
Гость
« Ответ #9 : Декабрь 21, 2010, 20:57 »

а зачем отрисовывать именно комбобокс? неужели недостаточно просто отобразить name?

Если отрисовывать только name, то дефолтный делегат сам справится.

А отрисовывать, чтобы было сразу видно, что это комбобокс. В таблице есть комбобоксовые поля и обычные, нередактируемые.

На самом деле меня больше всего раздражает, что для выпадания комбобокса надо кликнуть 2 раза, тут отрисовка вообще не причём.
ну если уж такая задача стоит то может поможет QPixmap::grabWidget с последующей отрисовкой полученого пискмапа. но имхо овчинка выделки не стоит - уж очень много накладных расходов - либо кэшировать пискмапы, либо делать это на лету при отрисовке что приведет к большим тормозам для больших объемов данных.
бред какой.... вам же сказали QStyle
Код:
void QStyle::drawControl ( ControlElement element, const QStyleOption * option, QPainter * painter, const QWidget * widget = 0 ) const [pure virtual]
Записан
twp
Гость
« Ответ #10 : Декабрь 22, 2010, 11:48 »

да, согласен, но каждый может иметь свое неправильное мнение  Подмигивающий К тому же дополнительная информация никому не повредит
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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