Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Alex Custov от Февраль 15, 2007, 11:19



Название: [QT3] фон для QListViewItem-а
Отправлено: Alex Custov от Февраль 15, 2007, 11:19
Для QListViewItem-а можно задать свой фон, переопределив paintCell():

Код:

void MListViewItem::paintCell(QPainter *p, const QColorGroup &cg,
int column, int width, int align)
{
    QColorGroup cc = cg;

// фон будет красным, если надо
    if(shouldBeRed())
        cc.setColor(QColorGroup::Base, Qt::red);

// нарисовать
    QListViewItem::paintCell(p, cc, column, width, align);
}


А вот как отрисовать фон для итема по всей ширине вьюпорта, например как в ACDSee ?

(http://img218.imageshack.us/img218/2715/acdseeqh6.th.png) (http://img218.imageshack.us/my.php?image=acdseeqh6.png)

Если использовать
Код:

void MListViewItem::paintCell(QPainter *p, const QColorGroup &cg,
int column, int width, int align)
{
    QColorGroup cc = cg;

// простой хак для отрисовки региона слева от элемента
    p->save();
    p->translate(-100, 0);
    p->fillRect(0,0,100,16,gray);
    p->restore();

    if(shouldBeRed())
          cc.setColor(QColorGroup::Base, Qt::red);

    QListViewItem::paintCell(p, cc, column, width, align);
}

В результате рисуется необходимая область слева от итема, НО
затираются ветки дерева с плюсиками ('+'), т.е. во вьюпорте
видны ТОЛЬКО итемы.

Бьюсь с этой проблемой уже давно, чего только не перепробовал.  :(
Может кто-нибудь что-нибудь подскажет ?
Спасибо.