QTableWidget图标不显示问题:QImage转QIcon后QTableWidgetItem为空
问题根因
代码中QPixmap对象的转换逻辑存在错误:QPixmap.fromImage()是静态方法,调用后会返回新的QPixmap实例,不会修改你预先初始化的空QPixmap对象,导致最终生成的QIcon没有实际内容,单元格因此显示为空。
修复方案
核心修改:修正QPixmap转换逻辑
将ToTable函数中QImage分支下的原有转换代码:
pixmap = QPixmap() pixmap.fromImage(data)
替换为直接接收静态方法的返回值即可:
pixmap = QPixmap.fromImage(data)
可选优化:适配单元格尺寸
为了避免原图尺寸过大导致图标显示超出单元格、变形,建议将pixmap提前缩放到适配行高的尺寸,你已经设置了行高为50px,可以按比例缩放:
# 保持宽高比缩放,尺寸略小于行高避免贴边 pixmap = pixmap.scaled(45, 45, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
修正后QImage分支完整代码
if isinstance(data, QImage): row = self.addRow() # 修正QPixmap转换逻辑 pixmap = QPixmap.fromImage(data) # 缩放适配单元格 pixmap = pixmap.scaled(45, 45, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation) icon = QIcon(pixmap) xItem = QtWidgets.QTableWidgetItem() xItem.setIcon(icon) yItem = QtWidgets.QTableWidgetItem("图片") table.setItem(row, 0, xItem) table.setItem(row, 1, yItem)
异常排查补充
如果修改后仍显示异常,可依次检查:
- QTableWidget第一列的列宽是否为0、是否被隐藏
- 导入语句是否包含QImage、QPixmap、QIcon相关类
- 剪贴板读取到的QImage是否有效,可打印
data.isNull()判断返回值是否为False
内容的提问来源于stack exchange,提问作者Deator
相关产品推荐
相关产品推荐

