2017-02-26 62 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()を再実装して、このチェックボックスを持ちたいセクションにPE_IndicatorCheckBoxでdrawPrimitive()を呼び出すことです。

あなたはまた順序で、チェックボックスをクリックしたときに検出するmousePressEvent()を再実装する必要がありますチーズをペイントするckedおよびunchecked状態です。

以下の例では、これを行うことができる方法を示しています

#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

私たちはデザインするために自分自身のチェックボックスをペイントしなければならず、テーブルビューからヘッダーから呼び出さなければなりません。ありがとう、私はチェックボックスを実装するためにこのメソッドを試してみます。 –

関連する問題