Стиль QTableWidget для QTableWidgetItem

Я использую простую QTableWidget отображать некоторые QTableWidgetItems, которые выглядят так:

+-------------+-------------+
|             | some text 1 |
| some number +-------------+
|             | some text 2 |
+-------------+-------------+
|             | some text 1 |
| some number +-------------+
|             | some text 2 |
+-------------+-------------+

Я знаю, что могу нарисовать границу вокруг QTableWidgetItems установив таблицу стилей для QTableWidget лайк

QTableView::item {
    border-bottom: 1px solid black;
}

но это относится ко всем QTableWidgetItems, Я хотел бы нарисовать границу только для элементов "некоторый номер" и "некоторый текст 2".

Можно ли это сделать, придерживаясь использования QTableWidget а также QTableWisgetItems? Я не могу использовать QObject::setProperty установить какое-либо свойство для идентификации элементов в таблице стилей, потому что QTableWidgetItemнет QObjectS…

1 ответ

Решение

Использовать делегат, пример

class MyDelegate : public QItemDelegate
{
  public:
    MyDelegate( QObject *parent ) : QItemDelegate( parent ) { }
    void paint( QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index ) const;
};

void MyDelegate::paint( QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index ) const
{
    QItemDelegate::paint( painter, option, index );
    painter->setPen( Qt::red );
    painter->drawLine( option.rect.topLeft(), option.rect.bottomLeft() );
   // What line should you draw
   // painter->drawLine( option.rect.topLeft(), option.rect.topRight() );
   // painter->drawLine( option.rect.topLeft(), option.rect.bottomLeft() );
}
...

        m_TableWidgetClass->setItemDelegateForRow(row, new MyDelegate( this));
        //m_TableWidgetClass->setItemDelegateForColumn(column, new MyDelegate( this));
Другие вопросы по тегам