我已经创建了一个执行情况 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());
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top