我自己创建的模型(MyListModel)存储我的对象列表MyObj。 MyObj存储一些文本信息。然后,我创建了类ItemDelegate,以管理每个项目的视图,并且还向每个项目添加QProgressBar。问题是我需要繁忙的进度条,但是当我执行应用程序时,QProgressBar不会执行任何操作。 是否可以在QListView中使用正常功能的繁忙进度条?
我猜测,这是因为QListView只显示静态数据。有什么办法可以使它正常工作吗? 我的绘制方法的实现委托:
void StatusItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
StatusItem my_item = index.data().value<StatusItem>();
wdg->name->setText(my_item.m_name);
switch (my_item.m_state)
{
case 0: wdg->progress->setMaximum(0); wdg->progress->setMinimum(0); break;
case 1: wdg->progress->setRange(0, 0); wdg->progress->setValue(100); break;
case 2: wdg->progress->setHidden(true); break;
}
QPalette pal;
QLinearGradient gradient(0, 0, 0, 100);
if ((option.state & QStyle::State_Selected) == QStyle::State_Selected)
{
pal.setBrush(QPalette::Window, QBrush(QColor(0, 255, 200)));
}
else
{
gradient.setColorAt(0.0, QColor(255,250,0));
gradient.setColorAt(1.0, QColor(255,255,255));
pal.setBrush(QPalette::Window, QBrush(QColor(Qt::transparent)));
pal.setBrush(QPalette::Window, QBrush(gradient));
}
wdg->setPalette(pal);
wdg->resize(option.rect.size());
painter->save();
painter->setRenderHint(QPainter::Antialiasing, true);
painter->translate(option.rect.topLeft());
wdg->render(painter);
painter->restore();
}
也许[QListView自定义项目](http://stackoverflow.com/questions/948444/qlistview-qlistwidget-with-custom-items)可以帮助一下。 – Trilarion
至少显示委托代码。 –
@Trilarion我正在使用已定制的项目,但它不起作用。 – Sunrise