2017-02-26 2 views
3

Comment faire pour cocher l'en-tête QTableWidget. Comment faire pour ajouter Sélectionner tout dans QHeaderView .. Checkbox Il n'affiche une case à cocher ..case à cocher sur l'en-tête de QtableWidget

QTableWidget* table = new QTableWidget(); 
QTableWidgetItem *pItem = new QTableWidgetItem("All"); 
pItem->setCheckState(Qt::Unchecked); 
table->setHorizontalHeaderItem(0, pItem); 

Répondre

0

Here, at Qt Wiki, il dit qu'il n'y a pas de raccourci pour cela et vous devez sous-classe headerView vous.

Voici un résumé de cette réponse wiki:

« Actuellement il n'y a pas d'API pour insérer des widgets dans l'en-tête, mais vous pouvez peindre la case à cocher vous afin de l'insérer dans l'en-tête

. ce que vous pouvez faire est de sous-classe QHeaderView, réimplémentez paintSection() puis appelez drawPrimitive() avec PE_IndicatorCheckBox dans la section où vous voulez avoir cette case.

vous devez également réimplémenter le mousePressEvent() pour détecter lorsque la case est cliqué, afin peindre le che états cked et non contrôlés.

L'exemple ci-dessous illustre comment cela peut se faire:

#include <QtGui> 

class MyHeader : public QHeaderView 
{ 
public: 
    MyHeader(Qt::Orientation orientation, QWidget * parent = 0) : QHeaderView(orientation, parent) 
    {} 

protected: 
    void paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const 
    { 
    painter->save(); 
    QHeaderView::paintSection(painter, rect, logicalIndex); 
    painter->restore(); 
    if (logicalIndex == 0) 
    { 
     QStyleOptionButton option; 
     option.rect = QRect(10,10,10,10); 
     if (isOn) 
     option.state = QStyle::State_On; 
     else 
     option.state = QStyle::State_Off; 
     this->style()->drawPrimitive(QStyle::PE_IndicatorCheckBox, &option, painter); 
    } 

    } 
    void mousePressEvent(QMouseEvent *event) 
    { 
    if (isOn) 
     isOn = false; 
    else 
     isOn = true; 
    this->update(); 
    QHeaderView::mousePressEvent(event); 
    } 
private: 
    bool isOn; 
}; 


int main(int argc, char **argv) 
{ 
    QApplication app(argc, argv); 
    QTableWidget table; 
    table.setRowCount(4); 
    table.setColumnCount(3); 

    MyHeader *myHeader = new MyHeader(Qt::Horizontal, &table); 
    table.setHorizontalHeader(myHeader); 
    table.show(); 
    return app.exec(); 
} 
+0

Il n'y a pas de méthode alternative pour appeler la case à cocher dans les l'en-tête de la vue de la table? –

+0

Nous devons peindre la case à cocher de notre auto pour concevoir et avoir à appeler de l'en-tête de la vue de la table .. Merci, je vais essayer cette méthode pour mettre en œuvre la case à cocher. –