You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 09:54:01