crossplatform.ru

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


  Ответ в delegate у QComboBox
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


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

BRE, твой семпл у меня нормально собрался и линуксе отобразил скролл.... НО, comboBox почему то выглядит по другому... см. скриншоты.....
(семпл BRE слева, мой справа)
BRE Дата 11.3.2009, 14:28
  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();
}
Litkevich Yuriy Дата 11.3.2009, 14:07
 
Цитата(lucifer_vrn @ 11.3.2009, 16:41) *
setItemDelegate(delegate); - нифига, скролл благополучно НЕ появляется.
т.е. уже косяк?

lucifer_vrn,
1) Qt у тебя самосборная или из хранилища пакетов дистрибутива?
2) какая версия Qt?
3) можешь выложить крошечный пример, где эта бага проявляется?
lucifer_vrn Дата 11.3.2009, 13:41
  QItemDelegate *delegate = new QItemDelegate();
setItemDelegate(delegate); - нифига, скролл благополучно НЕ появляется.

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

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

з.ы. в этом посте речь шла о запуске под линукс.
Константин Дата 11.3.2009, 0:20
  либо бага, либо сам накосячил.
попробуй навесить какой-нть кутэшный делегат вместо своего и посмотри как будет себя вести вьюха со скроллом.
lucifer_vrn Дата 10.3.2009, 18:40
  спасибо я так и думал.
переназначил 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
Константин Дата 9.3.2009, 21:56
  нет
lucifer_vrn Дата 9.3.2009, 21:05
  прошу прощения за тупой вопрос, гугл и ему подобные я уже на изнанку вывернул.
есть модель, есть делегат. делагат представляет собой рисованную картинку (QImage рисуется в painter) и две строки (painter.drawText).
присваиваем их обоих для QComboBox.
В выпадающем спике все зашибись отрисовывается. но как только я выбираю что либо в списке, список закрывается, а в самом ComboBox ничего не появляется. если в модели сделать чтоб возвращала текст, тогда все ок. paint в делегаете при этом не вызывается, только запрашивает у модели DisplayRole и DecorateRole(видимо для иконки и текста)
внимание вопрос можно ли сделать стандарнтыни способами не переопределяя paintEvent у самого QComboBoxа, не рисую второй виджет рядом с комбобоксом и прочими извратами, чтобы делегат рисовался у QComboBox не только в выпадающем списке, а еще и в нем самом???
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 20:27