我需要动态选择qpixmaps以显示在QML Image项目内部。应该从源qpixmap中裁剪出qpixmaps,我将从QML文件中对其进行设置。我希望在QML的第一个需求下使用C ++代码裁剪它们,并将其缓存以备将来使用。对于动态图像操作,应该从QQuickImageProvider派生我自己的类,并将其加载到QML Application Engine。但是我该如何控制源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 );
...
}
Run Code Online (Sandbox Code Playgroud)
在main.cpp中,它的加载方式为:
QQmlApplicationEngine engine;
...
engine.addImageProvider("my_quick_image_provider", new MyQuickImageProvider(QQmlImageProviderBase::Image));
Run Code Online (Sandbox Code Playgroud)
我想通过QML更改源图像路径。如何使setPath方法可访问?一种明显的方法是将方法声明为Q_INVOKABLE(并从QObject和qmlRegisterType派生MyQuickImageProvider),但是然后我应该在QML源中声明我的类的实例:
MyQuickImageProvider {
id: my_quick_image_provider
...
}
Run Code Online (Sandbox Code Playgroud)
从main.cpp对其进行访问将存在问题。这样的设计对我来说似乎很奇怪。还有更优雅的解决方案吗?
我需要一个功能与vector<bool>C++ 相同的类.Rust文档说明了BitVec,但在编译期间use std::collections::BitVec导致未解决的导入错误.根据拉动请求,BitVec已被删除.有没有足够的替代品?
如果我以明显的方式在.h中声明它:
namespace <named_namespace> {
namespace {
…
<type> <function>(<parameters>);
…
}
}
Run Code Online (Sandbox Code Playgroud)
并将其实施.cpp,将发生编译错误:
'<type> <named_namespace>::{anonymous}::<function>(<parameters>)' should have been declared inside <named_namespace>
如果不将函数的实现放在单个文件中,是否可以避免此错误?目前我使用关键字static代替,但它会产生多次恼人的警告:
'<type> <named_namespace>::<function>(<parameters>)' declared 'static' but never defined
正如我所理解的那样,只能通过将函数保存在单个文件(标题或源代码)中来禁用它.
欢迎使用交叉编译器解决方案(如果有的话).
或者将头文件拆分为"公共"和"私有"部分更有效?