QTableView在Release模式下setModel崩溃,Debug模式正常

1.下面代码debug模式正常,release模式崩溃在setModel这里

QVariantListListModel *md = new QVariantListListModel(this);
ui->tableView->setModel(md);
md->setVariantListListPtr(&m_datas);
ui->tableView->resizeColumnsToContents();

使用windbg获取异常在QFileSystemModel:

CONTEXT:  (.ecxr)
eax=00000000 ebx=64695751 ecx=00000000 edx=00000000 esi=06322068 edi=06322068
eip=58c5e1ad esp=008ffa30 ebp=64695750 iopl=0         nv up ei pl nz na pe nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00210206
Qt5Widgets!QFileSystemModel::qt_static_metacall+0x38d:
58c5e1ad 894804          mov     dword ptr [eax+4],ecx ds:002b:00000004=????????
Resetting default scope

EXCEPTION_RECORD:  (.exr -1)
ExceptionAddress: 58c5e1ad (Qt5Widgets!QFileSystemModel::qt_static_metacall+0x0000038d)
   ExceptionCode: c0000005 (Access violation)
  ExceptionFlags: 00000000
NumberParameters: 2
   Parameter[0]: 00000001
   Parameter[1]: 00000004
Attempt to write to address 00000004

WRONG_SYMBOLS_TIMESTAMP: cfd48485

WRONG_SYMBOLS_SIZE: 1af000

怀疑是new出来的model在设置的时候越界了,详细问题得后面看汇编在具体分析;

解决方法:改

new QVariantListListModel(this);

为全局的

QVariantListListModel md;

解决,有知道原因的希望大佬不吝赐教。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: QTableViewsetModel函数是用来设置数据模型的。它接受一个QAbstractItemModel类型的参数,用于提供数据和元数据给QTableView显示。通过设置不同的数据模型,可以实现不同的数据显示方式和交互方式。 ### 回答2: qtableview setmodelQt 框架中用于设置表格视图(QTableView)数据模型的方法。在 Qt 框架中,QTableView 是用于显示表格数据的控件,而 QAbstractItemModel 则是用于提供表格数据的抽象数据模型类。 通过将 QAbstractItemModel 类或其子类设置为 QTableView 控件的数据模型,并使用 setModel() 方法将其与 QTableView 控件相关联,就可以轻松地显示表格数据。在将数据模型设置为 QTableView 控件的过程中,可以通过 setModel() 方法将其它设置(如视图行、列表示例大小等)与 QTableView 控件相关联。 基于 QAbstractItemModel 模型的 QGraphicsScene(Qt5.1 之后 QGraphicsScene 已经不再建议使用),QStandardItemModel 和 QStringListModel 都可以用来将数据与 QTableView 视图相关联。 此外,对于一些自定义的表格数据,开发者也可以通过自巧手编写符合 QAbstractItemModel 规范的子类来实现数据绑定。QAbstractTableModel 和 QAbstractListModelQt 框架提供的较为常见的两类数据模型,它们都可以继承 QAbstractItemModel 实现数据绑定。 总的来说,qtableview setmodelQt 框架中关于设置表格视图模型的重要方法之一,它使得开发者可以轻松地将数据与 QTableView 控件相关联,为表格数据的处理和显示提供了极大的便利性和灵活性。 ### 回答3: QTableViewQt框架中的一种用来展示表格数据的控件,它可以通过setModel函数来设置数据模型。setModel函数的作用是将对应的数据模型与QTableView控件关联起来,从而可以通过数据模型对表格数据进行操作。 在使用setModel函数时,需要首先创建一个数据模型对象,这个数据模型对象是QAbstractItemModel类的子类,可以使用系统提供的QStandardItemModel、QSqlQueryModel等现成的模型类或者自定义一个数据模型类。 在创建好数据模型对象后,使用setModel函数将这个数据模型对象与QTableView控件关联起来,这样就会将数据模型中存储的数据显示在表格中。一旦关联完成后,通过对数据模型对象的操作,可以对表格的数据进行增删改查等操作,同时也会自动更新表格的显示。 需要注意的是,在使用setModel函数时,需要将数据模型对象指针传递给setModel函数,同时也需要确保数据模型对象的作用域与QTableView控件的生命周期相同,否则可能会导致程序崩溃等异常状况。 总之,QTableView setModel函数是连接数据模型与表格控件之间的桥梁,通过这个函数可以实现对表格数据的操作和管理。在实际开发中,需要掌握好这一函数的使用方法,以便能够更加有效地完成表格数据的展示和管理工作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值