Как изменить выбор стандартных элементов QlistView - PullRequest
1 голос
/ 06 мая 2020

у меня есть QListView. Я назначил ему своего делегата Modeland, в котором я переопределил метод paint(..):

void PlainDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    QRect rect = option.rect;
    QLinearGradient gradient(0,0,rect.width(),rect.height());

    if (option.state & QStyle::State_Selected) 
    {
     gradient.setColorAt(1,Qt::black); //not work
     }

    else if(option.state & QStyle::State_MouseOver&& !isEditorOpen)
    {

       //set gradient
    }
    else
    {
       //set gradient
    }

    painter->fillRect(option.rect, gradient);
    painter->setPen(Qt::NoPen);
    painter->setBrush(gradient);
    painter->drawRect(rect);

    QStyledItemDelegate::paint(painter,option,index);
}

он работает вот так элементы перекрываются стандартным синим окном. Как убрать это окно?

1 Ответ

1 голос
/ 09 мая 2020

Вы можете сделать это через CSS.

Посмотрите на это (в файле css или QWidget::setStyle(QStyle *style)):

QListView::item:selected
{
     border: 1.2px;
     border-color: #273e51;
     border-style: outset;
     ...etc
}

QListView::item:selected:!active
{

}

QListView::item:selected:active
{

}

QListView::item:hover
{

}

посмотрите на это: https://doc.qt.io/qt-5/stylesheet-reference.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...