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

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

请分享您的想法

最佳答案

您可以设置另一个标志,请参见documentation:

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

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

但是您可以根据(pseudo-)checkstate为headerItem设置不同的图标,并在headerItem.data(userRole)中视需要保存checkstate。我在以下步骤中做到了(我只知道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')

结果是:

09-06 06:27