Я думаю, вам нужно создать подкласс QItemDelegate .
QItemDelegate может использоваться для предоставления
пользовательские функции отображения и редактор
виджеты для представлений элементов на основе
Подклассы QAbstractItemView. Используя
делегат для этой цели позволяет
механизмы отображения и редактирования должны быть
индивидуальные и разработанные независимо
от модели и вида.
Этот код взят из примеров Qt, торрент-приложения.
class TorrentViewDelegate : public QItemDelegate
{
Q_OBJECT
public:
inline TorrentViewDelegate(MainWindow *mainWindow) : QItemDelegate(mainWindow) {}
inline void paint(QPainter *painter, const QStyleOptionViewItem &option,
const QModelIndex &index ) const
{
if (index.column() != 2) {
QItemDelegate::paint(painter, option, index);
return;
}
// Set up a QStyleOptionProgressBar to precisely mimic the
// environment of a progress bar.
QStyleOptionProgressBar progressBarOption;
progressBarOption.state = QStyle::State_Enabled;
progressBarOption.direction = QApplication::layoutDirection();
progressBarOption.rect = option.rect;
progressBarOption.fontMetrics = QApplication::fontMetrics();
progressBarOption.minimum = 0;
progressBarOption.maximum = 100;
progressBarOption.textAlignment = Qt::AlignCenter;
progressBarOption.textVisible = true;
// Set the progress and text values of the style option.
int progress = qobject_cast<MainWindow *>(parent())->clientForRow(index.row())->progress();
progressBarOption.progress = progress < 0 ? 0 : progress;
progressBarOption.text = QString().sprintf("%d%%", progressBarOption.progress);
// Draw the progress bar onto the view.
QApplication::style()->drawControl(QStyle::CE_ProgressBar, &progressBarOption, painter);
}
};
В принципе, как вы можете видеть, он проверяет, имеет ли окрашиваемый столбец определенный индекс, и в этом случае он рисует индикатор выполнения. Я думаю, что вы могли бы немного его настроить, и вместо использования QStyleOption вы можете использовать свой собственный виджет.
edit: не забудьте настроить делегата элемента с вашим QListView, используя setItemDelegate .
При изучении вашего вопроса я наткнулся на эту ветку , которая описывает, как рисовать пользовательский виджет с использованием QItemDelegate, я считаю, что он содержит всю необходимую вам информацию.