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 не только в выпадающем списке, а еще и в нем самом???
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Константин
  опции профиля:
сообщение 9.3.2009, 21:56
Сообщение #2


Студент
*

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

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




Репутация:   1  


нет
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lucifer_vrn
  опции профиля:
сообщение 10.3.2009, 18:40
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 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
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Константин
  опции профиля:
сообщение 11.3.2009, 0:20
Сообщение #4


Студент
*

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

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




Репутация:   1  


либо бага, либо сам накосячил.
попробуй навесить какой-нть кутэшный делегат вместо своего и посмотри как будет себя вести вьюха со скроллом.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lucifer_vrn
  опции профиля:
сообщение 11.3.2009, 13:41
Сообщение #5


Студент
*

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

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




Репутация:   0  


QItemDelegate *delegate = new QItemDelegate();
setItemDelegate(delegate); - нифига, скролл благополучно НЕ появляется.

setItemDelegate(0) - скролл отображается....

нифига не пойму, такое чувство что надо что-то в делегате еще вписывать, только вот что
или это баг Qt...

з.ы. в этом посте речь шла о запуске под линукс.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 11.3.2009, 14:07
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Цитата(lucifer_vrn @ 11.3.2009, 16:41) *
setItemDelegate(delegate); - нифига, скролл благополучно НЕ появляется.
т.е. уже косяк?

lucifer_vrn,
1) Qt у тебя самосборная или из хранилища пакетов дистрибутива?
2) какая версия Qt?
3) можешь выложить крошечный пример, где эта бага проявляется?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 11.3.2009, 14:28
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

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




Репутация:   44  


Qt 4.4.3 Linux - все Ok.

#include <QApplication>
#include <QComboBox>
#include <QItemDelegate>
#include <QDebug>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QStringList lst;
    for( int i = 0; i < 20; ++i )
        lst << QString( "String %1" ).arg( i );

    QItemDelegate d;

    QComboBox cb;
    cb.addItems( lst );
    cb.setItemDelegate( &d );
    cb.show();

    return a.exec();
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lucifer_vrn
  опции профиля:
сообщение 12.3.2009, 16:21
Сообщение #8


Студент
*

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

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




Репутация:   0  


Цитата(Litkevich Yuriy @ 11.3.2009, 14:07) *
т.е. уже косяк?
да.
1) незнаю, не я на машину ставил, скорее всего сборная.
2) 4.4.3
3) тут проблема семпл то выложить я смогу, но ему кча либ еще может потребоваться, а именно iris, а к ней уже всякие qca итд итп. К вечеру постараюсь выкинуть эти либы и выложить.

BRE, твой семпл у меня нормально собрался и линуксе отобразил скролл.... НО, comboBox почему то выглядит по другому... см. скриншоты.....
(семпл BRE слева, мой справа)
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 6.7.2022, 9:24