прошу прощения за тупой вопрос, гугл и ему подобные я уже на изнанку вывернул.
есть модель, есть делегат. делагат представляет собой рисованную картинку (QImage рисуется в painter) и две строки (painter.drawText).
присваиваем их обоих для QComboBox.
В выпадающем спике все зашибись отрисовывается. но как только я выбираю что либо в списке, список закрывается, а в самом ComboBox ничего не появляется. если в модели сделать чтоб возвращала текст, тогда все ок. paint в делегаете при этом не вызывается, только запрашивает у модели DisplayRole и DecorateRole(видимо для иконки и текста)
внимание вопрос можно ли сделать стандарнтыни способами не переопределяя paintEvent у самого QComboBoxа, не рисую второй виджет рядом с комбобоксом и прочими извратами, чтобы делегат рисовался у QComboBox не только в выпадающем списке, а еще и в нем самом???
нет
спасибо я так и думал.
переназначил 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
либо бага, либо сам накосячил.
попробуй навесить какой-нть кутэшный делегат вместо своего и посмотри как будет себя вести вьюха со скроллом.
QItemDelegate *delegate = new QItemDelegate();
setItemDelegate(delegate); - нифига, скролл благополучно НЕ появляется.
setItemDelegate(0) - скролл отображается....
нифига не пойму, такое чувство что надо что-то в делегате еще вписывать, только вот что
или это баг Qt...
з.ы. в этом посте речь шла о запуске под линукс.
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();
}
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)