Je pense que vous devez à la sous-classe QItemDelegate.
QItemDelegate peut être utilisé pour fournir
affichage personnalisé des fonctionnalités et de l'éditeur
des widgets pour le point de vue en fonction sur
QAbstractItemView sous-classes. À l'aide d'un
délégué à cette fin permet à l'
l'affichage et la modification des mécanismes de
personnalisé et développé de manière indépendante
à partir du modèle et la vue.
Ce code est pris à partir de Qt exemples, l'application torrent.
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);
}
};
Fondamentalement, comme vous pouvez le voir, il vérifie si la colonne à peindre est d'un indice, si si il peint une barre de progression. Je pense que vous pouvez tricher un peu et au lieu d'utiliser un QStyleOption vous pouvez utiliser votre propre widget.
edit: ne pas oublier de configurer votre point délégué auprès de votre QListView à l'aide de setItemDelegate.
Lors de l'enquête à votre question, je suis tombé sur ce thread, qui analyse comment peindre un widget personnalisé à l'aide d'un QItemDelegate, je crois qu'il a toutes les informations dont vous pourriez avoir besoin.