Frage

Ich habe eine Implementierung der QAbstractListModel Klasse in Qt Jambi 4.4 und bin zu finden geschaffen, dass das Modell mit einem QListView Ergebnisse in nichts mit angezeigt wird, jedoch unter Verwendung des Modells mit einem QTableView die Daten korrekt angezeigt.

Im Folgenden finden Sie meine Implementierung von 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();
    }
}

Und hier ist, wie ich das Modell gesetzt:

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

Kann jemand sehen, was ich falsch mache? Ich würde gerne glauben, es ist ein Problem mit meiner Implementierung war, weil, wie jeder sagt, wählen Sie ist nicht gebrochen!

War es hilfreich?

Lösung

Ich bin nicht in Jambi erlebt, aber sollten Sie keine QVariant von Methodendaten () statt Zurückgeben eines Foo zurückkommen? Es ist mir nicht klar, wie der Blick geht zu wissen, wie die Foo in einen String für die Anzeige zu konvertieren.

Auch jede Chance, die ich Ihnen den leichter zu bedien QStandardModel und QStandardModelItem statt Walzen ein vollständig benutzerdefiniert man auf die harte Weise verkaufen könnte? Und wenn Sie wollen immer einen Blick haben, können Sie das gesamte MVC-Muster ganz vermeiden und verwenden Sie nur die sehr sehr einfach QListWidget zu verwenden.

Andere Tipps

Ihr Modell Daten () Implementierung hat zwei Probleme darin:

  • Es ist immer auf unterschiedliche Werte für unterschiedliche Positionsdaten Rollen. Ihre aktuellen Implementierung gibt denselben Wert für alle Rollen und einige Ansichten können haben Probleme mit ihm.

  • QVariant in Jambi ist nicht das gleiche wie in regelmäßigen Qt. Wenn Sie nichts zurück haben,
    nur null zurück.

Eine bessere Implementierung wäre:

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());
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top