【发布时间】:2020-06-03 18:52:06
【问题描述】:
我的 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 给我的功能,因为这些类只是信息的容器。
是否有某种技巧或数据结构可以做到这一点?
【问题讨论】:
-
您可以将 Q_GADGET 用于结构
-
这可行,但缺点是该结构不能在 QML 本身中实例化(据我所知)。这将使绑定到 UI 元素成为不可能,这是我不愿错过的功能。
-
我猜你不想做一个“创造者”功能(比如
Qt.point(...))。也许cast operator 是一个选项?这确实复制了结构,但听起来你可能喜欢它