每个 QTableWidgetItem 的 QTableWidget 样式
QTableWidget style per QTableWidgetItem
我正在使用一个简单的 QTableWidget
来显示一些 QTableWidgetItems
,看起来像这样:
+-------------+-------------+
| | some text 1 |
| some number +-------------+
| | some text 2 |
+-------------+-------------+
| | some text 1 |
| some number +-------------+
| | some text 2 |
+-------------+-------------+
我知道我可以通过为 QTableWidget
设置样式 sheet 来围绕 QTableWidgetItems
绘制边框
QTableView::item {
border-bottom: 1px solid black;
}
但这适用于所有 QTableWidgetItems
。我只想为 "some number" 和 "some text 2" 项绘制边框。
是否可以在坚持使用 QTableWidget
和 QTableWisgetItem
的同时这样做?我不能使用 QObject::setProperty
设置一些 属性 来识别样式 sheet 中的项目,因为 QTableWidgetItem
不是 QObject
…
使用委托,示例
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));
我正在使用一个简单的 QTableWidget
来显示一些 QTableWidgetItems
,看起来像这样:
+-------------+-------------+
| | some text 1 |
| some number +-------------+
| | some text 2 |
+-------------+-------------+
| | some text 1 |
| some number +-------------+
| | some text 2 |
+-------------+-------------+
我知道我可以通过为 QTableWidget
设置样式 sheet 来围绕 QTableWidgetItems
绘制边框
QTableView::item {
border-bottom: 1px solid black;
}
但这适用于所有 QTableWidgetItems
。我只想为 "some number" 和 "some text 2" 项绘制边框。
是否可以在坚持使用 QTableWidget
和 QTableWisgetItem
的同时这样做?我不能使用 QObject::setProperty
设置一些 属性 来识别样式 sheet 中的项目,因为 QTableWidgetItem
不是 QObject
…
使用委托,示例
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));