我自己創建的模型(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