[Qt] 在QTableWidget中添加QCheckBox并居中

Qt垂直/水平布局管理器(QBoxLayout,QHBoxLayout, QVBoxLayout)

实现思路:把QCheckBox嵌入式到一个水平布局中

    QWidget *widget = new QWidget;
    QHBoxLayout *layout = new QHBoxLayout;
    QCheckBox *box = new QCheckBox;
    layout->addWidget(box);
    layout->setMargin(0);
    layout->setAlignment(box,Qt::AlignCenter);
    widget->setLayout(layout);
    tblList->setCellWidget(0,0,widget);
 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以使用QItemDelegate来实现。你需要创建一个自定义的QItemDelegate,并重写createEditor和setEditorData函数,将QCheckBox设置为editor,并在editor上安装一个事件过滤器来捕获鼠标点击事件。当QCheckBox被点击时,它会发出一个stateChanged信号,你可以在该信号的槽函数调用QTableWidget的itemClicked信号。 以下是一个简单的示例代码: ```python from PyQt5.QtWidgets import QTableWidget, QTableWidgetItem, QItemDelegate, QCheckBox from PyQt5.QtCore import Qt class CheckBoxDelegate(QItemDelegate): def createEditor(self, parent, option, index): editor = QCheckBox(parent) editor.installEventFilter(self) return editor def setEditorData(self, editor, index): value = index.model().data(index, Qt.EditRole) editor.setChecked(value) def eventFilter(self, editor, event): if event.type() == Qt.MouseButtonRelease and event.button() == Qt.LeftButton: self.commitData.emit(editor) self.closeEditor.emit(editor, QItemDelegate.NoHint) return True return super().eventFilter(editor, event) class TableWidget(QTableWidget): def __init__(self, parent=None): super().__init__(parent) self.setItemDelegateForColumn(0, CheckBoxDelegate(self)) self.itemClicked.connect(self.on_item_clicked) def on_item_clicked(self, item): print("Item clicked:", item.row(), item.column()) if __name__ == '__main__': import sys from PyQt5.QtWidgets import QApplication app = QApplication(sys.argv) table = TableWidget() table.setColumnCount(2) table.setRowCount(2) table.setItem(0, 0, QTableWidgetItem()) table.setItem(1, 0, QTableWidgetItem()) table.show() sys.exit(app.exec_()) ``` 在这个示例,我们创建了一个TableWidget,并在第一列上设置了QCheckBox。我们使用CheckBoxDelegate来设置QCheckBox作为editor,并在editor上安装了一个事件过滤器。当QCheckBox被点击时,它会发出一个stateChanged信号,CheckBoxDelegate的eventFilter函数会捕获该事件,并在self.commitData.emit(editor)发出commitData信号。在TableWidget的构造函数,我们将itemClicked信号连接到on_item_clicked函数,以便在QTableWidget的项目被单击时调用该函数。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值