QML/C++/QObject Struct Copy
QML/C++/QObject Struct Copy
我的Qt/QML程序使用C++中声明的类来构建QML中的信息,并将其作为捆绑包传递给C++函数。
这些结构派生自 QML 要求的 QObject。例:
class ResultStorageOptionsStruct : public QObject {
Q_OBJECT
public:
explicit ResultStorageOptionsStruct(QObject * parent = nullptr) : QObject(parent) {}
~ResultStorageOptionsStruct() = default;
ResultStorageOptionsStruct(const ResultStorageOptionsStruct& blob) {
}
bool folderValid;
QString folderURL;
Q_PROPERTY(bool folderValid MEMBER folderValid)
Q_PROPERTY(QString folderURL MEMBER folderURL)
};
Q_DECLARE_METATYPE(ResultStorageOptionsStruct);
使用这种方法,将信息从 QML 传递到C++可以毫无问题地工作,但是在C++端处理这些信息非常麻烦,因为您无法复制/分配类(派生自 QObject)。
我想复制/序列化/反序列化我的类,以便在它们处于 c++ 端后轻松处理。一旦我们处于 c++ 端,我就不需要 QObject 给我的功能,因为这些类只是信息的容器。
是否有某种技巧或数据结构来实现这一点?
您可以序列化和反序列化为 QIODevice,但这将用于文件存储。对我来说,这听起来更像是你想要一个围绕普通C++对象的 QObject 包装器。
我会用你需要的数据创建一个C++类。然后创建一个 QObject 派生类,其中包含对C++类的(弱)引用,在将原始类传递给 QML 时,您将原始类包装在中。
class MyData
{
public:
int x;
};
class MyDataWrapped : QObject
{
Q_OBJECT
public:
MyDataWrapped(MyData *obj) : md(obj) {}
void x() const { return md->x; }
Q_PROPERTY(...)
private:
MyData *md; // You might want to make this a weak pointer
};
潜在的棘手问题是,如果数据从 QML 或 C++ 更改,而包装器仍然存在。QML怎么知道一个属性被改变了,如果你从C++改变它,反之亦然。在这里,QObject、信号和插槽派上用场。但是,如果数据在共享时是只读的,我想你应该没问题。
相关文章:
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- std::filesystem::copy throws filesystem_error
- C++Union/Struct位域的实现和可移植性
- 如何在c++中定义以struct为数据成员的类中的构造函数
- 如何在 Boost.Asio 中使用 Zero-copy sendmsg/receive
- 结构体 S { int align; } 之间的区别;(struct 关键字后的名称)和 struct { int al
- struct.error:解压缩 C++ 结构时,解包需要 288 字节的缓冲区
- 错误:"Left of getValue must have class/struct/union"
- 在 SVM-Struct 中未定义对 sqrt 的引用(已使用 -lm)
- 数据类型"struct seq<0, 1, 2>{}"含义是什么?
- C++ 一个lambda浅拷贝const Type&如果它被赋予一个命名捕获,如[copy=val](){}?
- 附加使用 Struct 作为"multikey"并将 std::vector 用作映射值的映射
- QML/C++/QObject Struct Copy
- 如何在 cpp 中解压缩数字,如果它们是使用 struct.pack(fmt, v1, v2, ..) 打包在 pyth
- C++赋值运算符,我们可以用 copy 替换它吗?
- 为什么我使用 std::copy() 收到运行时错误(分段错误)?
- Msgpack能否提供更好的性能和与Python的struct.pack()相同的功能?
- 如何解决C++中声纳库贝静态代码分析错误"Explicitly define the missing copy constructor, move constructor .."
- 如何使用 std::copy 当类有"无符号字符和运算符[]"时