单元格0中带有QCheckBox的Horizo​​ntalHeader

时间:2015-04-14 15:57:09

标签: c++ qt5 qtablewidget

如何将第一个索引(单元格0)中带有复选框的Horizo​​ntalHeader添加到Qt中的QTableWidget? 以下说明不起作用。

headerItem->setFlags(headerItem->flags() ^ Qt::ItemIsEditable);
headerItem->data(Qt::CheckStateRole);
headerItem->setCheckState(Qt::Checked);
qTableWidget->setHorizontalHeaderItem(0,headerItem);

请分享您的想法

2 个答案:

答案 0 :(得分:1)

您可以设置另一个标记,请参阅documentation

headerItem->setFlags(headerItem->flags() ^ Qt::ItemIsEditable | Qt::ItemIsUserCheckable);

这是我的第一个念头。经过几次尝试和文档和几个论坛的研究我很确定,QheaderView中的项目不支持复选框。

但是您可以根据(伪)检查状态为headerItem设置不同的图标,如果需要headerItem.data(userRole),则保存检查状态。我是按照以下步骤完成的(我只知道Python,但我想,你可以把它翻译成C ++):

设置图标:

headerItem.setIcon(QtGui.QIcon('unchecked.png'))
headerItem.setData(256,'unchecked')
headerItem.setFlags(QtCore.Qt.ItemIsEnabled|QtCore.Qt.ItemIsSelectable)

连接信号

self.horizontalHeader().sectionClicked.connect(self.changeIcon)

并定义更改图标的方法

def changeIcon(self,index):
    if self.horizontalHeaderItem(index).data(256) == 'unchecked':
        self.horizontalHeaderItem(index).setIcon(QtGui.QIcon('checked.png'))
        self.horizontalHeaderItem(index).setData(256,'checked')
    else:
        self.horizontalHeaderItem(index).setIcon(QtGui.QIcon('unchecked.png'))
        self.horizontalHeaderItem(index).setData(256,'unchecked')

结果是:

unchecked

and checked

答案 1 :(得分:0)

你必须继承QHeaderView重新实现paintSection( )mousePressEvent( )方法,当然要为可点击部分绘制矩形,并记住在调整大小时你会有重绘整个事物+可点击区域。

除了可能滥用cornerWidget的{​​{1}}之外,我不会知道另一种可能的方式。

查看QTableWidgetQPainter类。


肮脏的方法可能只是保留QMouseEvent这种可以使用row( 0 )

的东西