2017-02-26 59 views
3

如何在QTableWidget標題上設置複選框。如何添加全部選中複選框在QHeaderView .. 它並不顯示一個複選框..QtableWidget標題上的複選框

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

回答

0

Here, at Qt Wiki,它說是沒有捷徑的它,你必須繼承headerView自己。

這裏是維基答案的摘要:

「目前還沒有API的報頭中插入窗口小部件,但你可以自己繪製的複選框,以便將其插入到頁眉

。你可以做的是細分QHeaderView,重新實現paintSection(),然後在你想擁有此複選框的部分叫drawPrimitive()與PE_IndicatorCheckBox。

您還需要重新實現mousePressEvent()檢測被點擊複選框時,爲了爲車漆新鮮和未經檢查的狀態。

下面的例子示出了如何可以做到這一點:

#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

有調用從表視圖報頭內的複選框沒有可供選擇的方法? –

+0

我們必須畫我們自己的複選框來設計,並且必須從表格視圖的標題中調用..謝謝,我會嘗試使用此方法來實現複選框。 –