2017-08-08 1 views
0

J'utilise simple QTableWidget pour afficher une QTableWidgetItems qui ressemble à ceci:le style QTableWidget par QTableWidgetItem

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

Je sais que je peux dessiner une bordure autour du QTableWidgetItems en fixant une feuille de style pour la QTableWidget comme

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

mais ceci s'applique à tous les QTableWidgetItems. Je souhaite dessiner la bordure uniquement pour les éléments "certains nombres" et "certains textes 2".

Est-il possible de le faire tout en conservant l'utilisation des codes QTableWidget et QTableWisgetItem? Je ne peux pas utiliser QObject::setProperty ensemble une propriété pour identifier les éléments de la feuille de style, car QTableWidgetItem s sont pas QObject s ...

Répondre

1

délégué utilisation, par exemple

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

Ca y est! Merci beaucoup :-) –