C++ 将从QAbstractListModel派生的类提供的QIcon绑定到QML映像
我尝试将从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
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
//...
}