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

标签 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);

请分享你的想法

最佳答案

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

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

这是我的第一个想法。经过多次尝试并研究文档和几个论坛后,我非常确定 QheaderView 中的项目不支持复选框。

但是您可以根据(伪)checkstate 为 headerItem 设置不同的图标,并在必要时将 checkstate 保存在 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

关于c++ - 单元格 0 中带有 QCheckBox 的 Horizo​​ntalHeader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29632010/

相关文章:

c++ - 将 std::string 拆分为两个 const char* 导致第二个 const char* 覆盖第一个

c++ - 使用 PugiXML 解析 Unicode XML 的示例代码

c++ - qt.network.ssl : QSslSocket: cannot resolve SSLv2_client_method

c++ - 如何知道在每个 mdi 子窗口中打开的文件的路径?

c++ - 如何播放 amr 音频,QMediaPlayer 不支持?

qt - 将 QTableWidget 中的 QRadioButtons 分组到行中

Python PyQt4 QTableWidget CellWidget 滚动列值

c++ - C++ 中 PC 关闭的强制处理

c++ - 使用具有生成器类型的 C++ 模板函数

ruby - Qt ruby : Creating the table and entering the data from text file dynamically