qt model/view 结构中数据不刷新问题

已经改变了数据, 但是视图不更新, 最后发现是model的data()接口处得设置一下数据类型

原代码:

    def data(self, index: QModelIndex, role: int = ...):
        if not index.isValid():
            return QVariant()
        # 居中显示文本
        if role == Qt.TextAlignmentRole:
            value = Qt.AlignCenter | Qt.AlignLeft
            return value
        if role == Qt.DisplayRole or role == Qt.EditRole:
            data = self._data_list[index.row()][index.column()]
            return data
        else:
            return QVariant()

我打印出data值符合我预期结果, 但是界面上不刷新显示, 网上找了各种方法都没解决, 最后想了下是不是数据类型的原因, 结果打印数据类型竟然是 numpy float64, 最后我给转成python的float类型就可以显示了(已经确保我的数据只能是str和float)

更改后

    def data(self, index: QModelIndex, role: int = ...):
        if not index.isValid():
            return QVariant()
        # 居中显示文本
        if role == Qt.TextAlignmentRole:
            value = Qt.AlignCenter | Qt.AlignLeft
            return value
        if role == Qt.DisplayRole or role == Qt.EditRole:
            data = self._data_list[index.row()][index.column()]
            if isinstance(data, str):
                return data
            else:
                return float(data)
        else:
            return QVariant()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用QtModel/View框架,在TableModel添加数据,并在TableView显示出来。以下是一个简单的示例代码: ``` // 创建一个TableModel QStandardItemModel *model = new QStandardItemModel(); // 添加表头 model->setHorizontalHeaderLabels(QStringList() << "列1" << "列2" << "列3"); // 添加数据 QList<QStandardItem *> rowItems; rowItems.append(new QStandardItem("行1列1")); rowItems.append(new QStandardItem("行1列2")); rowItems.append(new QStandardItem("行1列3")); model->appendRow(rowItems); rowItems.clear(); rowItems.append(new QStandardItem("行2列1")); rowItems.append(new QStandardItem("行2列2")); rowItems.append(new QStandardItem("行2列3")); model->appendRow(rowItems); // 在TableView显示TableModel QTableView *tableView = new QTableView(); tableView->setModel(model); tableView->show(); ``` 在TableModel使用appendRow()方法可以添加一行数据。在上面的示例代码,我们添加了两行数据,每行数据有三列。最后,将TableView设置为该TableModel,并调用show()方法显示出来即可。 ### 回答2: 在Qt,可以通过使用QTableView来实现在TableView上添加数据。首先,我们需要创建一个QStandardItemModel模型,并将其设置为QTableView的模型。然后,可以使用QStandardItem来创建和设置要显示的数据项。最后,将数据项添加到模型。 下面是一个示例代码: ```python # 导入需要的模块 from PyQt5.QtWidgets import QApplication, QTableView from PyQt5.QtGui import QStandardItemModel, QStandardItem import sys # 创建应用程序对象 app = QApplication(sys.argv) # 创建一个QTableView和一个QStandardItemModel模型 table_view = QTableView() model = QStandardItemModel() # 设置QTableView的模型为QStandardItemModel table_view.setModel(model) # 创建和设置要显示的数据项 item1 = QStandardItem("数据1") item2 = QStandardItem("数据2") item3 = QStandardItem("数据3") # 将数据项添加到模型 model.appendRow([item1, item2, item3]) # 显示QTableView table_view.show() # 运行应用程序 sys.exit(app.exec_()) ``` 在上面的示例,我们创建了一个QTableView和一个QStandardItemModel模型。然后,使用QStandardItem类创建了三个数据项,并将它们添加到模型。最后,将模型设置为QTableView的模型,并显示QTableView。当运行这段代码时,将在QTableView显示包含三个数据项的一行数据。 ### 回答3: 在Qt实现在TableView上添加数据可以按照以下步骤进行: 1. 创建TableViewModel对象:首先,我们需要创建一个TableView和一个Model对象,并将Model对象与TableView绑定。可以使用QTableView类和QStandardItemModel类来实现。 2. 设置Model的表头:使用setHorizontalHeaderLabels()方法来设置Model的表头。 3. 添加数据Model:使用Model的insertRow()方法来插入一行数据,然后使用Model的setData()方法来设置每个单元格的数据。 4. 刷新TableView:使用TableView的reset()方法来刷新TableView,使其显示最新的数据。 下面是一个示例代码,演示如何在TableView上添加数据: ```cpp #include <QApplication> #include <QTableView> #include <QStandardItemModel> int main(int argc, char *argv[]) { QApplication app(argc, argv); // 创建TableViewModel对象 QTableView tableView; QStandardItemModel model; // 将Model对象与TableView绑定 tableView.setModel(&model); // 设置Model的表头 model.setHorizontalHeaderLabels({"姓名", "年龄"}); // 添加数据Model model.insertRow(0); model.setData(model.index(0, 0), "张三"); model.setData(model.index(0, 1), 25); model.insertRow(1); model.setData(model.index(1, 0), "李四"); model.setData(model.index(1, 1), 30); // 刷新TableView tableView.reset(); // 显示TableView tableView.show(); return app.exec(); } ``` 在上述代码,我们首先创建了一个TableView和一个Model对象,并将Model对象与TableView绑定。然后,我们使用setHorizontalHeaderLabels()方法设置Model的表头,使用insertRow()方法插入行数据,使用setData()方法设置每个单元格的数据。最后,我们使用reset()方法刷新TableView,使其显示刚刚添加的数据。执行代码后,会弹出一个包含添加数据的TableView窗口。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值