Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将从QAbstractListModel派生的类提供的QIcon绑定到QML映像_C++_Qt_Qml_Qt Quick_Qabstractitemmodel - Fatal编程技术网

C++ 将从QAbstractListModel派生的类提供的QIcon绑定到QML映像

C++ 将从QAbstractListModel派生的类提供的QIcon绑定到QML映像,c++,qt,qml,qt-quick,qabstractitemmodel,C++,Qt,Qml,Qt Quick,Qabstractitemmodel,我尝试将从QAbstractListModel派生的类提供的QIcon绑定到QML映像,如下所示: Component { id: myDelegate //... Column { anchors.verticalCenter: parent.verticalCenter spacing: 5 Image { sour

我尝试将从QAbstractListModel派生的类提供的QIcon绑定到QML映像,如下所示:

Component {
    id: myDelegate
    //...
            Column {
                anchors.verticalCenter: parent.verticalCenter
                spacing: 5

                Image {
                    source: model.DecorationRole
                }

                Text {
                    text: model.DisplayRole
    //...
}
但这会导致以下错误:

无法将QIcon分配给QUrl

如何正确执行此操作?

您不能将QIcon指定为QML映像的源

你需要做的是为你的图标选择一个自定义的URL格式,例如

images://myicons/<icon_id>
不能将QIcon指定为QML映像的源

你需要做的是为你的图标选择一个自定义的URL格式,例如

images://myicons/<icon_id>

我想出了这个解决办法。它是有效的,但任何建议或改进都是非常受欢迎的

ImageProvider.h

ImageProvider.cpp

main.qml


我想出了这个解决办法。它是有效的,但任何建议或改进都是非常受欢迎的

ImageProvider.h

ImageProvider.cpp

main.qml


你能详细说明如何返回显然必须来自我的模型的像素数据吗?你能详细说明如何返回显然必须来自我的模型的像素数据吗?
class ImageProvider : public QQuickImageProvider
{
    public:
        explicit ImageProvider(myModel *myModel);
        QPixmap requestPixmap(const QString &id, QSize *size, const QSize &requestedSize);

    signals:

    public slots:

    private:
        myModel *m_myModel;
};
ImageProvider::ImageProvider(myModel *myModel) :
    QQuickImageProvider(QQuickImageProvider::Pixmap),
    m_myModel(myModel)
{
}

QPixmap ImageProvider::requestPixmap(const QString &id, QSize *size, const QSize &requestedSize)
{
    QModelIndex index;
    bool foundId = false;

    for(int row = 0; row < m_myModel->rowCount(); row++)
    {
        index = m_myModel->index(row, 0);
        QString name = QVariant(m_myModel->data(index, Qt::DisplayRole)).toString();

        if(name == id)
        {
            foundId = true;
            break;
        }
    }

    if(!foundId)
        return QPixmap();

    QIcon icon = m_myModel->data(index, Qt::DecorationRole).value<QIcon>();

    QPixmap pixmap = icon.pixmap(128,128);

    return pixmap;
}
ImageProvider *imageProvider = new ImageProvider(myModel);
view->engine()->addImageProvider(QLatin1String("provider"), imageProvider);
Component {
    id: myDelegate
    //...
            Column {
                anchors.verticalCenter: parent.verticalCenter
                spacing: 5

                Image {
                    source: "image://provider/" + model.DisplayRole
                }

                Text {
                    text: model.DisplayRole
    //...
}