Russian Qt Forum

Qt => Model-View (MV) => Тема начата: LeX от Октябрь 15, 2009, 18:39



Название: QProgressBar делегат
Отправлено: LeX от Октябрь 15, 2009, 18:39
Есть ли готовый пример делегата на основе QProgressBar?
Необходимо чтобы он постоянно отображался и обновлялся при обновлении данных в QTableView?
Сам прогресс бар будет статическим, то есть он нужен только для отображения статуса процесса в таблице ???


Название: Re: QProgressBar делегат
Отправлено: Rcus от Октябрь 15, 2009, 20:40
Можно же просто через стиль рисовать QStyle::CE_ProgressBar, но нужно переопределять еще sizeHint чтобы хватало места.
Другой путь принят в ksysguard (see http://websvn.kde.org/trunk/KDE/kdebase/workspace/libs/ksysguard/processui/ksysguardprocesslist.cpp?view=markup line 124). Удобен тем что возникает меньше проблем в выделением.


Название: Re: QProgressBar делегат
Отправлено: LeX от Октябрь 16, 2009, 08:55
Можно же просто через стиль рисовать QStyle::CE_ProgressBar, но нужно переопределять еще sizeHint чтобы хватало места.

В общем я метод Paint переписал создав своего делегата. Остальные методы не переопределял, правильно ли делегат будет работать?
Вот собственно код:
Код:
void ProgressBarDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
QVariant value = index.model()->data(index,Qt::DisplayRole);
QStyleOptionProgressBar Option;
Option.rect = option.rect;
Option.maximum=100;
Option.minimum=0;
Option.progress=int(value.toInt()/100);
Option.text=QString().setNum(value.toInt()/100)+"%";
Option.textVisible=true;
QApplication::style()->drawControl(QStyle::CE_ProgressBar,&myOption,painter);
}

Мне он нужен для отображения данных в таблице (только статика).