Russian Qt Forum

Qt => Model-View (MV) => Тема начата: Andrew12 от Декабрь 08, 2010, 22:27



Название: Постоянное отображение делегата QTableWidget
Отправлено: Andrew12 от Декабрь 08, 2010, 22:27
Здравствуйте, многоуважаемый all.

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

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

Как сделать, чтоб ComboBox отображался постоянно?


Название: Re: Постоянное отображение делегата QTableWidget
Отправлено: crossly от Декабрь 09, 2010, 10:02
переопределить у делегата метод paint ... и отрисовать комбобокс


Название: Re: Постоянное отображение делегата QTableWidget
Отправлено: brankovic от Декабрь 20, 2010, 08:31
Метод openPersistentEditor делает такое. Имеется у QAbstractItemView, QTableWidget, QListWidget, QTreeWidget.


Название: Re: Постоянное отображение делегата QTableWidget
Отправлено: crossly от Декабрь 20, 2010, 17:16
а тут стоит подумать.... держать в памяти кучу открытых эдиторов или все же просто отрисовать...


Название: Re: Постоянное отображение делегата QTableWidget
Отправлено: brankovic от Декабрь 21, 2010, 12:46
а тут стоит подумать.... держать в памяти кучу открытых эдиторов или все же просто отрисовать...

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

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


Название: Re: Постоянное отображение делегата QTableWidget
Отправлено: Kolobok от Декабрь 21, 2010, 12:49
Есть ли простой способ его отрисовать?

Посмотри описание QStyle


Название: Re: Постоянное отображение делегата QTableWidget
Отправлено: twp от Декабрь 21, 2010, 17:31
а зачем отрисовывать именно комбобокс? неужели недостаточно просто отобразить name?


Название: Re: Постоянное отображение делегата QTableWidget
Отправлено: brankovic от Декабрь 21, 2010, 17:59
а зачем отрисовывать именно комбобокс? неужели недостаточно просто отобразить name?

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

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

На самом деле меня больше всего раздражает, что для выпадания комбобокса надо кликнуть 2 раза, тут отрисовка вообще ни при чём.


Название: Re: Постоянное отображение делегата QTableWidget
Отправлено: twp от Декабрь 21, 2010, 18:34
а зачем отрисовывать именно комбобокс? неужели недостаточно просто отобразить name?

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

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

На самом деле меня больше всего раздражает, что для выпадания комбобокса надо кликнуть 2 раза, тут отрисовка вообще не причём.
ну если уж такая задача стоит то может поможет QPixmap::grabWidget с последующей отрисовкой полученого пискмапа. но имхо овчинка выделки не стоит - уж очень много накладных расходов - либо кэшировать пискмапы, либо делать это на лету при отрисовке что приведет к большим тормозам для больших объемов данных.


Название: Re: Постоянное отображение делегата QTableWidget
Отправлено: crossly от Декабрь 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]


Название: Re: Постоянное отображение делегата QTableWidget
Отправлено: twp от Декабрь 22, 2010, 11:48
да, согласен, но каждый может иметь свое неправильное мнение  ;) К тому же дополнительная информация никому не повредит