Стиль 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
а также QTableWisgetItem
s? Я не могу использовать QObject::setProperty
установить какое-либо свойство для идентификации элементов в таблице стилей, потому что QTableWidgetItem
нет QObject
S…
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));