欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

View与Model绑定注意事项 (视图无数据显示)

程序员文章站 2022-06-07 19:59:08
...

 

Qt 中视图与模型绑定时,模型必须使用new来创建。否则刚开始初始化的时候,视图无数据显示,或者后期视图不能随着模型的改变而改变

 

具体原因:我猜测是局部变量生命周期的问题。new 的变量在堆中,除非手动释放,否则一直存在。如果不new一个Model,把Model变量放在类成员变量中,视图就可以正常显示数据了。

 

Eorror错误的写法

 

QStandardItemModel model(4,2);  
  
  
model.setHeaderData(0, Qt::Horizontal, tr("Label"));  
model.setHeaderData(1, Qt::Horizontal, tr("Quantity"));  
  
  
ui.tableView->setModel(&model);  
  
for (int row = 0; row < 4; ++row) {  
    for (int column = 0; column < 2; ++column) {  
        QModelIndex index = model.index(row, column, QModelIndex());  
        model.setData(index, QVariant((row+1) * (column+1)));  
    }  
}  
   

 

Right 正确的写法

 

QStandardItemModel *model;  
  
model = new QStandardItemModel(4,2);  
ui.tableView->setModel(model);  
  
model->setHeaderData(0, Qt::Horizontal, tr("Label"));  
model->setHeaderData(1, Qt::Horizontal, tr("Quantity"));  
  
for (int row = 0; row < 4; ++row) {  
    for (int column = 0; column < 2; ++column) {  
        QModelIndex index = model->index(row, column, QModelIndex());  
        model->setData(index, QVariant((row+1) * (column+1)));  
    }  
}