使用 QQuickImageProvider 的正确方法是什么?

2024-03-15

我需要动态选择 qpixmaps 以显示在 QML 图像项中。该 qpixmaps 应该从源 qpixmap 中裁剪出来,我将从 QML 文件中设置它。我希望它们能够根据 QML 的第一个需求被 C++ 代码裁剪并缓存以供将来使用。对于动态图像操作,应该从 QQuickImageProvider 派生我自己的类并将其加载到 QML 应用程序引擎。但是我怎样才能控制源qpixmap呢?通过财产?如果是,那么我的自定义提供程序必须从 QObject 派生,并且它的实例应该在 QML 内声明,不是吗?但是引擎如何加载它呢?我觉得这种实现方式是错误的,但是哪一种是正确的呢?

UPD:好的,我有一堂课:

class MyQuickImageProvider : public QQuickImageProvider {
public:
    ...
    // This method should set the source image path
    void setPath ( QUrl path );
    // Overriden method of base class; should return cropped image
    virtual QPixmap requestPixmap ( const QString &id, QSize *size, const QSize &requestedSize );
    ...
}

在 main.cpp 中,它被加载为:

QQmlApplicationEngine engine;
...
engine.addImageProvider("my_quick_image_provider", new MyQuickImageProvider(QQmlImageProviderBase::Image));

我想通过 QML 更改源图像路径。如何使 setPath 方法可供访问?最明显的方法是将方法声明为 Q_INVOKABLE (并从 QObject 和 qmlRegisterType 派生 MyQuickImageProvider ),但随后我应该在 QML 源中声明我的类的实例:

MyQuickImageProvider {
    id: my_quick_image_provider
    ...
}

从main.cpp访问它会出现问题。而这样的设计对我来说似乎很奇怪。还有更优雅的解决方案吗?


你不使用MyQuickImageProvider作为 QML 对象,您也没有定义Q_INVOKABLE方法,因为您无法从 QML 访问图像提供程序对象。

engine.addImageProvider("my_quick_image_provider", [...]

设置您访问图像的方式的名称,例如

// qml file
Image {
    source: "image://my_quick_image_provider/name_of_my_image"
}

后面的部分“name_of_my_image”被称为id,您可以在其中找到

virtual QPixmap requestPixmap ( const QString &id, QSize *size, const QSize &requestedSize );

现在实施requestPixmap在你的MyQuickImageProvider并让它使用id字符串来生成 QPixmap。

我想你可以扔掉void setPath ( QUrl path );方法,因为您只需要一个图像提供程序实例来处理该类型的所有图像。

由于构造函数不是从基类继承的,我不认为new MyQuickImageProvider(QQmlImageProviderBase::Image));说得通。最好添加一个不带参数的构造函数

class MyQuickImageProvider : public QQuickImageProvider {
public:
    MyQuickImageProvider();
    // ...

并将图像类型放入初始值设定项列表中:

MyQuickImageProvider::MyQuickImageProvider()
    : QQuickImageProvider(QQuickImageProvider::Pixmap)
{
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 QQuickImageProvider 的正确方法是什么? 的相关文章

  • 中间件 API 的最佳实践是什么? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我们正在开发一个中间件 SDK 采用 C 和 Java 语言 供游戏开发人员 动画软件开发人员 阿凡达开
  • C++ 模板中的名称查找

    我有一些 C 代码 如果没有 fpermissive 选项 就无法再编译 这是我无法分享的专有代码 但我认为我已经能够提取一个简单的测试用例来演示该问题 这是 g 的输出 template eg cpp In instantiation o
  • gtest 和 gmock 有什么区别?

    我试图理解的目的google mock Google 的 C 模拟框架 https github com google googletest blob master googlemock README md 我已经与gtest较早 但我还是
  • 在桌面应用程序中,类库的连接字符串存储在哪里?我可以在app.config中使用吗?

    我是桌面应用程序开发的新手 目前正在使用分层架构 用户界面 DAL BLL 构建桌面应用程序 在 Web 开发中 我曾经将连接字符串存储在 web config 中 我的类库从那里访问它 请指导我在桌面应用程序中如何以及在何处存储 DAL
  • 使用静态类型代替变量

    当您的项目不使用命名空间时 有什么方法可以告诉编译器使用静态类型而不是变量吗 例如 我有一个名为 User 的类 它具有各种静态和非静态方法 假设调用了其中一个静态方法GetUser 我想称之为User GetUser 方法来自一个方法 该
  • C++ 非类型参数包扩展

    我正在编写由单一类型参数化的模板函数 并且具有可变数量的相同类型 而不是不同类型 的参数 它应该检查第一个值是否在其余值中 我想这样写 include
  • 使用 Selenium for C# 登录 Facebook

    我一直在使用 Selenium C 框架并尝试进行 facebook 登录 但没有任何运气 这是我到目前为止得到的 基于这篇文章 使用 Selenium 测试 Facebook Connect 应用程序 https stackoverflo
  • async wait 在调用异步方法时返回 Task> 而不是 List

    我正在尝试了解 async wait 的用法 并且研究了一些博客文章 现在我已经编写了一个测试代码 但它没有按照我期望的方式工作 我有一个返回列表的方法 private List
  • 如何在 C++ 中对静态缓冲区执行字符串格式化?

    我正在处理一段对性能要求非常高的代码 我需要执行一些格式化的字符串操作 但我试图避免内存分配 甚至是内部库的内存分配 在过去 我会做类似以下的事情 假设是 C 11 constexpr int BUFFER SIZE 200 char bu
  • Azure 2012 年 10 月 SDK 损坏 UseDevelopmentStorage=true

    有人尝试过使用 usedevelopmentstorage true 连接字符串的 2012 年 10 月 Azure sdk 吗 CloudStorageAccount Parse UseDevelopmentStorage true 抛
  • C 中“for”循环中的两个变量

    我正在编写一些代码 需要在其中使用两个变量for环形 下面的代码看起来没问题吗 它确实给了我预期的结果 for loop 1 offset loop 2 offset 2 loop 1 gt offset 190 loop 2 lt 190
  • Qt中如何获取鼠标在屏幕上的位置?

    我想获取屏幕上的鼠标坐标 我怎样才能在 Qt 中做到这一点 在 Windows 上 使用 C 我正在做类似答案中建议的事情对于这个问题 https stackoverflow com q 11737665 1420197 正如文档所述 QC
  • 从窗口内容截取屏幕截图(无边框)

    我正在寻找有关如何使用 C 将表单内容保存在位图中的解决方案 我已经尝试过使用 DrawToBitmap 但它捕获了所有带边框的窗口 这就是这段代码的结果 public static Bitmap TakeDialogScreenshot
  • 在 ncurses 中使用退格键

    我设置了一个简单的 ncurses 程序 它使用 getch 一次读取一个字符并将它们复制到缓冲区中 我遇到的问题是检测到按下退格键 这是相关代码 while buffer i c getch EOF i if c n break else
  • 无法将方法组“Read”转换为非委托类型“bool”

    我正在尝试使用SqlDataReader检查条目是否存在 如果存在则返回ID 否则返回false 当我尝试编译时 出现错误 无法将方法组 Read 转换为非委托类型 bool 我一直在遵循在 VB 中找到的示例 但似乎翻译可能不正确 pri
  • C# 的空条件委托调用线程安全吗? [复制]

    这个问题在这里已经有答案了 这就是我一直以来编写事件引发者的方式 例如属性更改 public event PropertyChangedEventHandler PropertyChanged private void RaisePrope
  • 使用互斥锁来阻止临界区外部的执行

    我不确定我的术语是否正确 但这里是 我有一个由多个线程使用的函数来写入数据 在注释中使用伪代码来说明我想要的内容 these are initiated in the constructor int data std atomic
  • 我应该使用多个 HttpClient 来进行批量异步 GET 请求吗?

    我有一个场景 我需要在尽可能短的时间内发出大量 GET 请求 想想大约 1000 个 我知道通常最好保留一个客户端并尽可能重用它 Create Single HTTP Client HttpClient client new HttpCli
  • win32 API 和 .NET 框架之间的选择

    我必须开发一个适用于 Windows 的应用程序 该应用程序将能够通过网络摄像头识别手势来控制鼠标 我将使用 vc 2008 进行开发 但我很困惑是使用 NET 框架还是核心 win32 API 性能对于我的应用程序非常重要 根据 Ivor
  • 在代码中而不是 XAML 中呈现 UserControl

    我想用RenderTargetBitmap将 UserControl 呈现为位图 而无需为其编写 XAML 当我这样做时 我得到一张空白图像 我是否错过了关键的一步 ValTool Controls VideoFisheyeOverlayC

随机推荐

  • 如何在Java中解密aes-256-cbc

    我已经在 php ini 中对字符串进行了加密 从 php 和 node js 解密成功 另外还必须通过java来解密 帮我看一下java解密的例子吗 PHP 加密代码 encrypt encryption method aes 256 c
  • 更改 $*DISTRO 值以进行测试

    我需要测试一个功能包括这一行 https github com rakudo rakudo commit 0a2eef8fb0adb24164999a2b71c415fd11fe748a diff 4ce1542a6f014c9a003fe
  • jquery 深度链接 - 它如何影响分析?

    我正在考虑使用http www asual com jquery address http www asual com jquery address 但我想知道它如何影响谷歌分析 谷歌分析是页面底部的一段代码 我想深层链接仍然看起来像是初始
  • 生成球体的顶点

    在 DirectX 移动照明示例中 圆柱体是按以下方式生成的 for DWORD i 0 i lt 50 i FLOAT theta 2 D3DMX PI i 50 1 pVertices 2 i 0 position D3DMXVECTO
  • JavaScript 的类似 Python 的继承

    在 python 中我可以做这样的事情 main py class MainClass def init self self name some name def startDoingStuff self print I m doing s
  • 确定形成四边形的顶点顺序

    假设我在 2D 空间中有 4 个顶点 有谁知道一种有效的算法可以给我对应于简单四边形的顶点排序 也就是说 它将标记顶点1 2 3 4这样如果我跟随1 2 2 3 3 4我将绘制一个简单的 即不相交的 四边形 只需提供我可以谷歌搜索的标准算法
  • 如何在Java中实现Stream而不出现资源泄漏警告

    我希望实施Stream
  • C 是否具有函数参数名称的 __func__ 功能?

    C 标准是否支持类似的东西 func 对于函数参数的名称 不 C99标准有以下内容 6 10 8 预定义宏名称 以下宏名称应由实现定义 DATE FILE LINE STDC STDC HOSTED STDC MB MIGHT NEQ WC
  • 包括本地与远程 javascript 库

    我正在使用 jsSHA 1 3 1在这里下载 https github com Caligatio jsSHA downloads并用于我的本地主机上的学习项目 它给出的结果与我通过引用遥控器获得的副本略有不同 如下所示 现在 远程复制对我
  • 实例初始值设定项和*this*关键字[重复]

    这个问题在这里已经有答案了 尝试编译这段代码 public class Main public static void main String args new Main System out println x Error here in
  • Internet Explorer 中的淘汰赛验证错误?

    在我的剃刀观点中 使用knockout http knockoutjs com据说敲除验证 https github com ericmbarnard Knockout Validation我添加以下行 以实际开始使用 ko 验证 Scri
  • 并行运行过程 - Oracle PL/SQL

    我正在尝试使用 dbms scheduler 并行运行存储过程 Oracle PL SQL 但出现类似未知作业的错误 我也尝试过 dbms job 这里出现错误 必须声明标识符 dbms jobs 有人可以帮我吗 以下是我尝试过的两种方法
  • 如何制作 text-decoration: 下划线和 2px 填充?

    我喜欢听话的前端开发人员必须创建带有 2 像素填充的下划线 而不是默认的 1 像素 是否存在简单的解决方案 PS 是的 伙计们 我知道 div 具有黑色背景颜色和 1px Npx 和位置 相对 但它太慢了 对于交叉浏览 最好使用text u
  • 替换git中的master分支并防止快进

    我在 github 上有一个库 大约一年前 我完全重写了该应用程序 但不向后兼容 它位于一个名为 结构化 的分支上 现在大多数安装该库的人都在使用该分支 我想将其设为主分支并将当前主分支移至 旧版 我不希望使用旧主机的人能够快进到新主机 因
  • 如何使用 Seed.rb 有选择地填充开发和/或生产数据库?

    我正在使用 seeds rb 来填充我的开发和生产数据库 我通常用虚拟数据填充第一个 然后用我的应用程序运行所需的实际最小数据 例如第一个用户等 填充后者 如何在 Seed rb 中指定每个数据的环境 鉴于我知道 group 是一个 Gem
  • 何时应使用链表的现实世界示例有哪些?

    另一位程序员提到 在他的职业生涯中 他们还没有在任何专业软件中找到使用链表数据结构的用例 我一时想不出什么好的例子 他主要是 C 和 Java 开发人员 谁能举一些例子来说明这是解决特定现实世界问题的正确数据结构 Related 链表的实际
  • 询问 Python 值“是否可散列”

    我感兴趣的是采用任意字典并将其复制到新字典中 并一路改变它 我想做的一项改变是交换键和值 不幸的是 有些价值观本身就是命令 但是 这会生成 不可散列类型 dict 错误 我真的不介意只是将值字符串化并为其提供密钥 但是 我希望能够做这样的事
  • 是否可以在 Chrome 开发者工具元素面板中选择多个元素?

    是否可以在 Chrome 开发者工具元素面板中一次选择多个元素 对于删除多个同级元素或快速重新排序非常有用 我期望Command Click or Shift Click这样做但没有成功 答案是否定的 在 Chrome 开发工具中一次无法选
  • Python kivy - 如何减少TextInput的高度

    我正在使用 kivy 为应用程序制作一个非常简单的 GUI 没什么复杂的 布局非常简单 尽管如此 我在 TextInputs 方面遇到了困难 它们总是以全高显示 我无法设法使它们调整到 合理的 文本高度 如高度 我正在使用 kv 文件样式
  • 使用 QQuickImageProvider 的正确方法是什么?

    我需要动态选择 qpixmaps 以显示在 QML 图像项中 该 qpixmaps 应该从源 qpixmap 中裁剪出来 我将从 QML 文件中设置它 我希望它们能够根据 QML 的第一个需求被 C 代码裁剪并缓存以供将来使用 对于动态图像