English 中文(简体)
Qt Jambi:QAbstractListModel未显示在QListView中
原标题:
  • 时间:2008-09-24 12:17:12
  •  标签:

我在Qt Jambi 4.4中创建了QAbstractListModel类的实现,发现使用带有QListView的模型不会显示任何内容,但使用带有QTableView

以下是我对<code>QAbstractListModel</code>的实现:

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);

有人能看到我做错了什么吗?我想这是我的实现中的一个问题,因为正如大家所说,select没有坏!

最佳回答

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

此外,我有没有机会向您推销更容易使用的QStandardModel和QStandardModelItem,而不是像以前那样推出完全自定义的?如果你只打算有一个视图,你可以完全避免整个MVC模式,只使用非常容易使用的QListWidget。

问题回答

您的模型的data()实现有两个问题:

  • It fails to different values for different item data roles. Your current implementation returns the same value for all roles, and some views can have problems with it.

  • QVariant in Jambi is not the same as in regular Qt. When you have nothing to return,
    just return 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());
}




相关问题