Qt詹比:QAbstractListModel不显示在QListView中
时间:2020-03-06 14:39:27 来源:igfitidea点击:
我已经在Qt Jambi 4.4中创建了QAbstractListModel类的实现,发现使用带有QListView的模型不会显示任何内容,但是带有QTableView的模型可以正确显示数据。
以下是我对QAbstractListModel的实现:
public class FooListModel extends QAbstractListModel
{
private List<Foo> _data = new Vector<Foo>();
public FooListModel(List<Foo> data)
{
if (data == null)
{
return;
}
for (Foo foo : data)
{
_data.add(Foo);
}
reset();
}
public Object data(QModelIndex index, int role)
{
if (index.row() < 0 || index.row() >= _data.size())
{
return new QVariant();
}
Foo foo = _data.get(index.row());
if (foo == null)
{
return new QVariant();
}
return foo;
}
public int rowCount(QModelIndex parent)
{
return _data.size();
}
}
这是我设置模型的方式:
Foo foo = new Foo();
foo.setName("Foo!");
List<Foo> data = new Vector<Foo>();
data.add(foo);
FooListModel fooListModel = new FooListModel(data);
ui.fooListView.setModel(fooListModel);
ui.fooTableView.setModel(fooListModel);
谁能看到我在做什么错?我想认为这是我的实现存在的问题,因为正如大家所说,选择并没有失败!
解决方案
我没有Jambi的经验,但是我们不应该从方法data()返回QVariant而不是返回Foo吗?我不清楚该视图如何知道如何将Foo转换为显示字符串。
另外,有没有机会我可以向我们出售易于使用的QStandardModel和QStandardModelItem,而不是艰难地推出完全定制的产品?而且,如果只使用一种视图,则可以完全避免使用整个MVC模式,而只需使用非常易于使用的QListWidget。
我们模型的data()实现中存在两个问题:
- 对于不同的项目数据角色,它不能具有不同的值。我们当前的实现为所有角色返回相同的值,并且某些视图可能会遇到问题。
- Jambi中的QVariant与常规Qt中的QVariant不同。当我们没有任何要返回的内容时,只需返回" null"即可。
更好的实现是:
public Object data(QModelIndex index, int role) {
if (index.row() < 0 || index.row() >= _data.size())
return null;
if (role != Qt.ItemDataRole.DisplayRole)
return null;
return _data.get(index.row());
}

