Причина
QListView , соотв. QListWidget действительно не поддерживает ::item:first
, поэтому вы не можете достичь желаемого с помощью таблиц стилей.
Решение
Вместо него можно использовать делегата.,Подкласс QStyledItemDelegate , переопределение QAbstractItemDelegate :: paint и QAbstractItemDelegate :: sizeHint и настройте их по своему вкусу.
Пример
Вот пример того, как это решение может быть реализовано:
- Создать класс
Delegate : public QStyledItemDelegate
В Delegate.cpp :
void Delegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
int b = option.rect.bottom() - 1;
painter->save();
painter->setClipping(true);
painter->setClipRect(option.rect);
if (index.row() < index.model()->rowCount() - 1)
painter->drawLine(option.rect.left() + 5, b, option.rect.right() - 5, b);
painter->restore();
QStyledItemDelegate::paint(painter, option, index);
}
QSize Delegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
{
QSize sz(QStyledItemDelegate::sizeHint(option, index));
sz.setHeight(32);
return sz;
}
Тестирование класса в приложении виджетов Qt
В MainWindow.cpp :
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
auto *list = new QListWidget(this);
list->addItems(QStringList{"1", "2", "3", "4", "5", "6"});
list->setItemDelegate(new Delegate(this));
list->setFrameStyle(QFrame::NoFrame);
setCentralWidget(list);
setContentsMargins(9, 9, 9, 9);
resize(200, 300);
}
Результат
Приведенный примервыдает следующий результат: