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

QListView 无法显示关联QStandardItemModel中的数据,代码错在哪里?

QListView不显示QStandardItemModel数据的问题排查与修复

核心错误原因

你代码里的QStandardItemModel mymodel(this)是函数内的局部栈变量,函数执行结束后该变量会被自动销毁,QListView保存的模型指针变成野指针,无法读取数据,导致内容不显示。

其他可能的异常点

  • 如果你为QListView设置了自定义Delegate,需要检查Delegate是否正确读取Qt::DisplayRole角色的数据,你代码中构造QStandardItem传入的字符串默认存储在该角色下
  • 检查QListView的布局是否正常,是否存在被其他控件遮挡、大小被设置为0的情况

修复方案

将模型改为类的成员变量,或者堆分配绑定父对象确保生命周期和窗口一致,修改后的代码如下:

// 首先在类的头文件中声明模型为成员变量
// class YourWidget : public QWidget {
// ...
// private:
//     QStandardItemModel *mymodel;
// ...
// }

// 函数内实现修改为:
mymodel = new QStandardItemModel(this);

QStandardItem *item1 = new QStandardItem("This is item one");
item1->setData("item", Qt::UserRole + 1);
mymodel->appendRow(item1);
QStandardItem *item2 = new QStandardItem("This is item two");
item2->setData("item", Qt::UserRole + 1);
mymodel->appendRow(item2);
QStandardItem *item3 = new QStandardItem("This is item three");
item3->setData("item", Qt::UserRole + 1);
mymodel->appendRow(item3);

ui->listView->setResizeMode(QListView::Adjust);
ui->listView->setWordWrap(true);
ui->listView->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
ui->listView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
ui->listView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
ui->listView->setModel(mymodel);

验证方法

设置模型后可以加调试语句验证数据是否正常:

qDebug() << "模型行数:" << mymodel->rowCount();
qDebug() << "第一行内容:" << mymodel->index(0,0).data().toString();

如果输出为3和对应字符串,说明模型数据正常,只需再检查控件显示配置即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 16:09:00