如何在QTableWidget标题上设置复选框。如何在QHeaderView中添加选择全部复选框.. 它不会显示复选框..
QTableWidget* table = new QTableWidget();
QTableWidgetItem *pItem = new QTableWidgetItem("All");
pItem->setCheckState(Qt::Unchecked);
table->setHorizontalHeaderItem(0, pItem);
答案 0 :(得分:0)
Here, at Qt Wiki,它说它没有快捷方式,你必须自己继承headerView。
以下是该wiki答案的摘要:
“目前没有API在标题中插入小部件,但您可以自己绘制复选框,以便将其插入标题。
您可以做的是继承QHeaderView,重新实现paintSection(),然后在要使用此复选框的部分中使用PE_IndicatorCheckBox调用drawPrimitive()。
您还需要重新实现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();
}
答案 1 :(得分:0)
代替上述解决方案,您只需将“按钮”替换为“全选”复选框,然后将名称按钮指定为“全选”即可。
因此,如果您按全选按钮,则称为按钮,并随按钮一起转到(此处全选)。