Qcombobox에서 분리기에 대한 스타일 시트를 추가하는 방법

StackOverflow https://stackoverflow.com/questions/19828160

  •  20-07-2022
  •  | 
  •  

문제

분리기와 함께 Qcombobox에 두 개의 항목을 추가했습니다.

addItem("New");
addItem("Delete");
insertSeparator(2);

스타일이 다른 아이템 선택을 강조하기 위해 스타일 시트를 사용하여 Qcombobox보기에 QlistView를 사용했습니다.

QListView * listView = new QListView(this);
this->setView(listView);

listView->setStyleSheet("QListView::item {                              \
                            color: black;                                    \
                            background: white;                           }  \
                            QListView::item:selected {                     \
                            color: white;                                  \
                            background-color: #0093D6  \
                            }                                               \
                            ");

이제 문제는 분리기가 전혀 보이지 않는다는 것입니다. 품목들 사이에 빈 공백을 보여줍니다. 나는 스타일 시트에 좋지 않아서 분리기를위한 새로운 스타일 시트를 만드는 방법에 대한 명확한 아이디어가 없습니다 ..

도움이 되었습니까?

해결책

당신은 관습을 만들어야합니다 itemDelegate 당신을 위해 QListView.

서브 클래스를 할 수 있습니다 QItemDelegate 나만의 대의원 수업을 만들려면. 사용 sizeHint 분리기의 크기를 설정하고 paint 기능. 항목이 분리기인지 확인하십시오 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 );
}

그런 다음 사용자 정의 대의원을 귀하에게 설정하십시오 listView:

listView->setItemDelegate(new ComboBoxDelegate);.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top