Sie müssen einen Brauch erstellen itemDelegate
für dein QListView
.
Sie können unterklassen QItemDelegate
Um Ihre eigene Delegierklasse zu erstellen. Verwenden sizeHint
Funktionieren Sie, um die Größe Ihres Separators festzulegen und in die zu malen paint
Funktion. Überprüfen Sie, ob die Elemente ein Trennzeichen mit sind index.data(Qt::AccessibleDescriptionRole).toString()
.
#ifndef COMBOBOXDELEGATE_H
#define COMBOBOXDELEGATE_H
#include <QItemDelegate>
class ComboBoxDelegate : public QItemDelegate
{
Q_OBJECT
public:
explicit ComboBoxDelegate(QObject *parent = 0);
protected:
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
};
#endif // COMBOBOXDELEGATE_H
void ComboBoxDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
if(index.data(Qt::AccessibleDescriptionRole).toString() == QLatin1String("separator"))
{
painter->setPen(Qt::red);
painter->drawLine(option.rect.left(), option.rect.center().y(), option.rect.right(), option.rect.center().y());
}
else
QItemDelegate::paint(painter, option, index);
}
QSize ComboBoxDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
{
QString type = index.data(Qt::AccessibleDescriptionRole).toString();
if(type == QLatin1String("separator"))
return QSize(0, 2);
return QItemDelegate::sizeHint( option, index );
}
Setzen Sie dann einfach Ihren benutzerdefinierten Delegierten auf Ihre listView
:
listView->setItemDelegate(new ComboBoxDelegate);
.