脱碑:QAbstractListModel没有显示在QListView
-
02-07-2019 - |
题
我已经创建了一个执行情况 QAbstractListModel
类在脱碑4.4和我发现,使用的模型 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没有经验,但你不应该从方法数据()返回QVariant而不是返回Foo吗?我不清楚视图如何知道如何将Foo转换为字符串以供显示。
此外,我有机会向您推销更易于使用的QStandardModel和QStandardModelItem,而不是通过艰难的方式滚动完全自定义的QStandardModel和QStandardModelItem吗?如果你只有一个视图,你可以完全避免整个MVC模式,只使用非常容易使用的QListWidget。
其他提示
你的模型的数据()实施有两个问题:
它无法以不同的价值观的不同项目的数据的角色。你的电流 实现返回的同样价值的所有角色,并且一些观点可以有 有它的问题。
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());
}
不隶属于 StackOverflow