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

Qt调用QTableWidget.setModel()触发私有方法错误的解决咨询

问题解决:QTableWidget.setModel() 私有方法错误

错误根源

QTableWidget 是Qt封装好的自带数据模型的表格控件,它的setModel()是私有方法,不能用来设置外部的QSqlRelationalTableModel。要配合SQL模型展示数据,你需要用QTableView控件。

解决方案

方案1:修改UI文件(推荐)

打开你的MitarbeiterWindow.ui文件,找到table_mitarbeiter控件,将其类型从QTableWidget改为QTableView,然后调整代码移除冗余初始化:

class MitarbeiterWindow(QMainWindow):
    def __init__(self):
        super(MitarbeiterWindow, self).__init__()
        loadUi("ui/MitarbeiterWindow.ui", self)
        print("----Mitarbeiterverwaltung geöffnet")
        self.mod_mitarbieter = QtSql.QSqlRelationalTableModel()
        self.mod_mitarbieter.setTable("Mitarbeiter")
        self.mod_mitarbieter.select()
        self.table_mitarbeiter.setModel(self.mod_mitarbieter)

方案2:不修改UI,手动填充QTableWidget数据

如果不想改动UI文件,可以从SQL模型中读取数据,逐个添加到QTableWidget中:

class MitarbeiterWindow(QMainWindow):
    def __init__(self):
        super(MitarbeiterWindow, self).__init__()
        loadUi("ui/MitarbeiterWindow.ui", self)
        print("----Mitarbeiterverwaltung geöffnet")
        self.load_mitarbeiter()

    def load_mitarbeiter(self):
        model = QtSql.QSqlRelationalTableModel()
        model.setTable("Mitarbeiter")
        model.select()
        
        # 清空表格并初始化结构
        self.table_mitarbeiter.clear()
        self.table_mitarbeiter.setColumnCount(model.columnCount())
        # 设置表头
        header_labels = [model.headerData(i, QtCore.Qt.Horizontal) for i in range(model.columnCount())]
        self.table_mitarbeiter.setHorizontalHeaderLabels(header_labels)
        # 逐行填充数据
        for row_idx in range(model.rowCount()):
            self.table_mitarbeiter.insertRow(row_idx)
            for col_idx in range(model.columnCount()):
                cell_data = str(model.data(model.index(row_idx, col_idx)))
                item = QtWidgets.QTableWidgetItem(cell_data)
                self.table_mitarbeiter.setItem(row_idx, col_idx, item)
        # 自适应列宽
        self.table_mitarbeiter.resizeColumnsToContents()

额外注意点

你的__init__方法里重复调用了QtWidgets.QMainWindow.__init__(self),这会覆盖之前的初始化操作,必须删除这一行,否则可能导致UI加载异常。

内容的提问来源于stack exchange,提问作者Manuel Jellitsch

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 13:20:21