-3

モデルとqmlがあります。

モデル.cpp:

Model::Model(QObject *parent): QAbstractListModel(parent)
{
}

void Model::addIcon(const QString &iconName, const QString &iconPath)
{
    beginInsertRows(QModelIndex(), rowCount(), rowCount());
    if(!indexMap.contains(iconName)) {
        paths.append(iconPath);
        indexMap.insert(iconName,paths.indexOf(iconPath));
    }
    else {

        //Update the icon for the designated icon
        paths[indexMap.value(iconName)] = iconPath;
        QModelIndex index = createIndex(indexMap.value(iconName),1);
        emit dataChanged(index,index);
    }

    endInsertRows();
}

QVariant Model::data(const QModelIndex &index, int role) const
{
    if (index.row() < 0 || index.row() >= indexMap.count())
        return QVariant();

    return paths.at(index.row());
}

int Model::rowCount(const QModelIndex &parent) const
{
    Q_UNUSED(parent)
    return paths.count();
}

QHash<int, QByteArray> Model::roleNames() const
{
    QHash<int, QByteArray> roles;
    roles[PathRole] = "iconImage";
    return roles;
}

Model.h

class Model : public QAbstractListModel {
    Q_OBJECT
public:

    enum MyRoles {
        PathRole = Qt::UserRole + 1
    };
    Q_ENUM(MyRoles)


    explicit Model(QObject *parent = 0);


    QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
    int rowCount(const QModelIndex &parent = QModelIndex()) const;
    QHash<int, QByteArray> roleNames() const;

    void addIcon(const QString &iconName, const QString &iconPath);

private:
    QList<QString> paths;
    QMap<QString,int> indexMap;

};

ラッパー:

Q_PROPERTY(MyModel* modelProperty READ getModel NOTIFY modelChanged)

Qml:

import QtQuick 2.5

Rectangle{
width:100
height:30

    ListView{
        id:icons

        property alias myModel: myService.modelProperty

        anchors.fill: parent
        anchors.topMargin: 10
        anchors.rightMargin: 20

        model: myModel

        delegate: Image{source: iconImage}
    }
}

初めてアイコンを設定すると、エラー メッセージは表示されません。最初の割り当ての後に、「[undefined] を QUrl に割り当てることができません」というエラーが表示されます。

モデルに addIcon メソッドを使用して新しいアイコン パスを追加します。

なぜこれが起こっているのか分かりますか?

前もって感謝します。

4

1 に答える 1