crossplatform.ru

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

> delegate у QComboBox
lucifer_vrn
  опции профиля:
сообщение 9.3.2009, 21:05
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 19
Регистрация: 27.2.2009
Пользователь №: 580

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




Репутация:   0  


прошу прощения за тупой вопрос, гугл и ему подобные я уже на изнанку вывернул.
есть модель, есть делегат. делагат представляет собой рисованную картинку (QImage рисуется в painter) и две строки (painter.drawText).
присваиваем их обоих для QComboBox.
В выпадающем спике все зашибись отрисовывается. но как только я выбираю что либо в списке, список закрывается, а в самом ComboBox ничего не появляется. если в модели сделать чтоб возвращала текст, тогда все ок. paint в делегаете при этом не вызывается, только запрашивает у модели DisplayRole и DecorateRole(видимо для иконки и текста)
внимание вопрос можно ли сделать стандарнтыни способами не переопределяя paintEvent у самого QComboBoxа, не рисую второй виджет рядом с комбобоксом и прочими извратами, чтобы делегат рисовался у QComboBox не только в выпадающем списке, а еще и в нем самом???
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
lucifer_vrn
  опции профиля:
сообщение 10.3.2009, 18:40
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 19
Регистрация: 27.2.2009
Пользователь №: 580

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




Репутация:   0  


спасибо я так и думал.
переназначил paintEvent в своем классе на основе QComboBox и все ОК.

возник другой косяк.
у итемов в комбо боксе не появляется полоса прокрутки в линуксе(полоса прокрутки имеется ввиду у выпадающего списка). под виндой все прикрасно, полоса появляется, а в линуксе ее нету, хотя стрелками с клавы итемы прокручивается.

стоит убрать строку setItemDelegate, а модель можно оставить, так полоса в линухе появляется....
непонимаю это баг Qt или в делегате для комбобокса что-то для скролла надо подписать?

#ifndef RPASWITCHERDELEGATE_H
#define RPASWITCHERDELEGATE_H

#include <QItemDelegate>
#include <QtGui>

class RpaSwitcherDelegate : public QAbstractItemDelegate
{
public:
    RpaSwitcherDelegate(QObject *parent = 0);

    void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const;
    QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
    void paint(QPainter *painter,const QStyleOptionViewItem &option,const QModelIndex &index) const;
};


#endif


з.ы. linux ubuntu 8.10
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


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


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




RSS Текстовая версия Сейчас: 29.11.2024, 21:23