将派生自 QAbstractListModel 的类提供的 QIcon 绑定到 QML Image
Bind a QIcon provided by a class derived from QAbstractListModel to QML Image
>我尝试将派生自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 Image
的源。
您需要做的是为图标选择自定义 URL 格式,例如
images://myicons/<icon_id>
此字符串是您设置为Image.source
的 URL 的字符串。
现在,您创建并注册了一个图像提供程序,当您从 QML 发送请求的 URL 时,该提供程序会传递图标:
- 创建一个
QQuickImageProvider
的子类,例如MyIconProvider
- 覆盖将
id
作为和参数并返回像素数据的函数requestPixmap
然后,在main.cpp
中注册图像提供程序
MyIconProvider *mip = new MyIconProvider();
engine.addImageProvider("myicons", mip);
我想出了这个解决方案。它有效,但非常欢迎任何建议或改进。
ImageProvider.h
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;
};
图像提供程序.cpp
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);
主.qml
Component {
id: myDelegate
//...
Column {
anchors.verticalCenter: parent.verticalCenter
spacing: 5
Image {
source: "image://provider/" + model.DisplayRole
}
Text {
text: model.DisplayRole
//...
}
相关文章:
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 在基于范围的for循环中使用结构化绑定声明
- 使用 LuaBridge 将 LuaJIT 绑定到C++会导致"PANIC: unprotected error"
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- 在使用GPU支持编译Tensorflow时,会遇到CUDA_TOOLKIT_PATH未绑定变量
- 视觉studo 2019中的漫画和静态/动态绑定
- 将自由函数绑定为类成员函数
- 将常量指针引用绑定到非常量指针
- 在派生类中绑定非静态模板化成员函数
- 绑定派生类方法C++从实例范围之外的分隔 std::function 变量调用
- 在 openGL 中多次绑定缓冲区
- 定义有趣的宏和正则表达式在Z3 C++绑定
- 使用结构化绑定'Reflection'
- 为什么 std::绑定错误参数可以成功?
- 如何绑定 C++ gRPC 客户端的网络接口
- 在 openmp 中,omp_get_thread_num是否绑定到物理线程?
- C++绑定(已弃用)
- 运行时错误:引用绑定到类型为"int"的空指针
- 有没有办法将重载的类函数绑定到函数对象?
- 将派生自 QAbstractListModel 的类提供的 QIcon 绑定到 QML Image