2017-08-08 5 views
0

Ich bin mit einem einfachen QTableWidget einige QTableWidgetItems angezeigt werden, die wie folgt aussehen:QTableWidget Stil pro QTableWidgetItem

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

Ich weiß, dass ich einen Rahmen um den QTableWidgetItems, indem ein Stylesheet für die QTableWidget ziehen kann wie

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

aber dies gilt für alle QTableWidgetItems. Ich möchte die Grenze nur für die Elemente "einige Zahlen" und "einige Texte 2" zeichnen.

Ist es möglich, dies während der Verwendung der QTableWidget und QTableWisgetItem s bleiben? Ich kann nicht QObject::setProperty Satz eine Eigenschaft verwenden, um die Elemente im Stylesheet zu identifizieren, weil QTableWidgetItem s sind keine QObject s ...

Antwort

1

Verwendung delegieren, zB

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)); 
+0

Das ist es! Danke vielmals :-) –

Verwandte Themen