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
相关产品推荐
相关产品推荐

