Qt Jambi:QAbstractListModel不在QListView中显示

时间:2008-09-24 12:17:13

标签: java qt qt-jambi qabstractlistmodel

我在Qt Jambi 4.4中创建了QAbstractListModel类的实现,并且发现使用带有QListView的模型导致没有显示任何内容,但是使用具有{{1的模型正确显示数据。

以下是我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();
    }
}

谁能看到我做错了什么?我想我的实施存在问题,因为正如大家所说,选择不会被打破!

2 个答案:

答案 0 :(得分:1)

我在Jambi没有经验,但你不应该从方法数据()返回QVariant而不是返回Foo吗?我不清楚视图如何知道如何将Foo转换为字符串以供显示。

此外,我有机会向您推销更易于使用的QStandardModel和QStandardModelItem,而不是通过艰难的方式滚动完全自定义的QStandardModel和QStandardModelItem吗?如果你只有一个视图,你可以完全避免整个MVC模式,只使用非常容易使用的QListWidget。

答案 1 :(得分:1)

您的模型的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());
}