2017-02-26 3 views
3

Wie setze ich Checkbox auf QTableWidget Header. How To Select All Checkbox in QHeaderView Hinzufügen .. Es ist nicht eine Checkbox nicht angezeigt ..Checkbox auf der Kopfzeile von QtableWidget

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

Antwort

0

Here, at Qt Wiki, es sagt, dass es keine Abkürzung für sie ist, und Sie haben zu Unterklasse headerView selbst.

Hier eine Zusammenfassung dieser Wiki Antwort:

„Derzeit gibt es keine API-Widgets in der Kopfzeile einzufügen, aber Sie können das Kontrollkästchen sich um malen es in den Header einzufügen

. Was Sie tun können, ist QHeaderView Unterklasse, reimplementieren paintSection() und dann drawPrimitive() mit PE_IndicatorCheckBox in dem Abschnitt in dem Sie diese Checkbox haben wollen.

würden Sie auch die mousePressEvent() reimplementieren müssen, um zu erkennen, wenn die Checkbox angeklickt wird, um um den che zu malen gesperrte und ungeprüfte Zustände.

Das folgende Beispiel zeigt, wie dies getan werden kann:

#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

Es gibt keine alternative Methode das Kontrollkästchen in der Kopfzeile von Tabellenansicht für den Aufruf? –

+0

Wir müssen die Checkbox selbst entwerfen und aus der Kopfzeile aus der Tabellenansicht aufrufen. Danke, ich werde diese Methode zur Implementierung von Checkbox ausprobieren. –

Verwandte Themen