- All (478)
- jom (0)
- Qt Linguist (7)
- Qt Eclipse Integration (9)
- Qt Designer (7)
- Qt Creator (4)
- Qt build system: qmake (31)
- Qt build system: configure (3)
- Qt Assistant (5)
- Printing (4)
- Porting from Qt 3 to Qt 4 (1)
- Plugins (7)
- Qt Visual Studio AddIn (2)
- Qt/MFC Migration (2)
- QtScript (3)
- MDI (2)
- XML (1)
- Widgets (22)
- WebKit (5)
- Tools and Containers (2)
- Threads (2)
- Text Handling (10)
- SQL (6)
- QtTest (1)
- QtService (1)
- Platform: Windows (49)
- Platform: Unix (16)
- Platform: Mac OS X (18)
- Image Formats (2)
- I/O (2)
- Graphicsview (8)
- Font handling (9)
- Event System (18)
- Drag and Drop (4)
- Dialogs (6)
- Desktop integration (3)
- ActiveQt (3)
- Itemviews (60)
- Layout (4)
- Qt Quick (10)
- Qt SDK (1)
- Licensing (2)
- Platform: Embedded Linux (38)
- Painting (32)
- OpenGL (4)
- Object Model (6)
- Network (5)
- Multimedia (3)
- Miscellanous (23)
- Main Window (19)
- Look and Feel (23)
- Development (0)
- Getting Involved (0)
- Routines (0)
How can I insert a checkbox into the header of my view?
Currently there is no API to insert widgets in the header, but you can paint the checkbox yourself in order to insert it into the header.
What you could do is to subclass QHeaderView, reimplement paintSection() [doc.qt.nokia.com] and then call drawPrimitive() [doc.qt.nokia.com] PE_IndicatorCheckBox in the section where you want to have this checkbox.
You would also need to reimplement the mousePressEvent() [doc.qt.nokia.com] to detect when the checkbox is clicked, in order to paint the checked and unchecked states.
The example below illustrates how this can be done:
- #include <QtGui>
- {
- public:
- {}
- protected:
- {
- painter->save();
- painter->restore();
- if (logicalIndex == 0)
- {
- QStyleOptionButton option;
- if (isOn)
- else
- }
- }
- {
- if (isOn)
- isOn = false;
- else
- isOn = true;
- this->update();
- }
- private:
- bool isOn;
- };
- int main(int argc, char **argv)
- {
- QTableWidget table;
- table.setRowCount(4);
- table.setColumnCount(3);
- table.setHorizontalHeader(myHeader);
- table.show();
- return app.exec();
- }
To have all your other checkboxes checked, you could use the pressed() signal which should be fired from the mousePressEvent() [doc.qt.nokia.com] and connect it to a custom slot where you set all your checkboxes checked or unchecked. See:

2 comments
August 8, 2010
Ant Farmer
The checkbox is partially displayed in Mac OS X. And the position of checkbox is not correct in Windows, Cleanlook, Plastique and so on.
September 30, 2010
Lab Rat
A couple of (possible) improvements:
Anyway, big thanks for the code tip. It’s really working fine for me right now.