QT中的复选框改变大小,并改为打勾

本文介绍了如何在QT中修改复选框的默认样式,使其尺寸变大并且选中状态显示为打勾,而非传统的打叉标记。提供了不依赖Windows风格的实现方法。

QT中的checkbox默认选中是打叉的,并且很小。想改大点,并修改选中的样子为打勾。不想使用 -style windows的可以用下面的方法。

如下:

QCheckBox::indicator {width: 13px;height: 13px;}//改变大小
QCheckBox::indicator:checked {image: url(:/images/checkbox_checked.png);}//选中时的样子

找个打勾的图片,做成与你的checkbox的大小一致,放到资源文件里。
使用:
ui->checkBox->setStyleSheet("QCheckBox::indicator {width: 20px; height: 20px;}QCheckBox::indicator:checked {image: url(:/image/checkbox.png);}");
这样就行了!

import sys from PyQt6 import QtWidgets, QtCore class MyTableWindow(QtWidgets.QWidget): def __init__(self): super().__init__() self.setWindowTitle("QTableWidget 表头插入复选框") self.resize(500, 300) # 创建表格 self.table = QtWidgets.QTableWidget(5, 3, self) self.table.setHorizontalHeaderLabels(['列0', '列1', '列2']) # 填充表格内容(第1列使用复选框) for row in range(self.table.rowCount()): cb = QtWidgets.QCheckBox() cb.setCheckState(QtCore.Qt.CheckState.Checked) cb.stateChanged.connect(lambda state, r=row: self.on_row_checkbox_changed(r, state)) self.table.setCellWidget(row, 1, cb) # 创建表头复选框控件 self.header_checkbox = QtWidgets.QCheckBox("全选") self.header_checkbox.setCheckState(QtCore.Qt.CheckState.Checked) self.header_checkbox.stateChanged.connect(self.on_header_checkbox_changed) self.header_widget = QtWidgets.QWidget() layout = QtWidgets.QHBoxLayout(self.header_widget) layout.setContentsMargins(3, 0, 3, 0) layout.addWidget(self.header_checkbox) layout.addStretch() # 设置空 QTableWidgetItem,避免表头文字冲突 self.table.setHorizontalHeaderItem(1, QtWidgets.QTableWidgetItem()) self.table.setCellWidget(0, 1, self.header_widget) # 布局 main_layout = QtWidgets.QVBoxLayout(self) main_layout.addWidget(self.table) self.setLayout(main_layout) def on_header_checkbox_changed(self, state): """当表头复选框状态变化时,同步更新所有行的复选框""" for row in range(self.table.rowCount()): widget = self.table.cellWidget(row, 1) if isinstance(widget, QtWidgets.QCheckBox): widget.blockSignals(True) # 阻止触发事件 widget.setCheckState(QtCore.Qt.CheckState(state)) widget.blockSignals(False) def on_row_checkbox_changed(self, row, state): """当某一行的复选框变化时,同步更新表头复选框状态""" all_checked = True any_unchecked = False for r in range(self.table.rowCount()): widget = self.table.cellWidget(r, 1) if isinstance(widget, QtWidgets.QCheckBox): if widget.checkState() == QtCore.Qt.CheckState.Checked: any_unchecked = False break elif widget.checkState() == QtCore.Qt.CheckState.Unchecked: all_checked = False any_unchecked = True if all_checked: self.header_checkbox.blockSignals(True) self.header_checkbox.setCheckState(QtCore.Qt.CheckState.Checked) self.header_checkbox.blockSignals(False) elif any_unchecked: self.header_checkbox.blockSignals(True) self.header_checkbox.setCheckState(QtCore.Qt.CheckState.Unchecked) self.header_checkbox.blockSignals(False) else: self.header_checkbox.blockSignals(True) self.header_checkbox.setCheckState(QtCore.Qt.CheckState.PartiallyChecked) self.header_checkbox.blockSignals(False) if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) window = MyTableWindow() window.show() sys.exit(app.exec()) 修改成两种状态 选中打勾 未选中空白
最新发布
08-06
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值