在派生类中调用q_invokable方法
Call Q_INVOKABLE method in derived class
我有一个有趣的问题。我不知道如何将两个从qobject继承的类组合。使用q_invokable方法从基类派生的类中使用q_invokable方法。我想在各种"模型"中多次使用" LoadFromjson"。
我已经尝试定义q_object宏,并重建类的逻辑。
//model.h
class Model : public QObject{
Q_OBJECT
public:
Q_INVOKABLE bool loadFromJson(const QString &data);
}
//sqltablemodel.h
class SqlTableModel : public QSqlTableModel{
//some code
}
//server.h
class Server : public SqlTableModel, Model
{
Q_OBJECT
public:
explicit Server(QString tableName = "");
};
//main.cpp
Server *server = new Server();
context->setContextProperty("server", server);
//
//server.qml
server.loadFromJson("123"); // not working
/*
If i remove QObject from Model then i can't call loadFromJson even Q_OBJECT defined, otherwise Server is ambigous using QObject. But i want to use methods from both base classes SqlTableModel & Model in derived Server with Q_INVOKABLE ability.
*/
main.cpp:41:„„ Qobject'是"服务器"的模棱两可的基础 context-> setContextProperty("服务器",服务器(;
model.h:27:„极:未定义的引用" vtable for Model"
我会使用"有"关系而不是"是"。看起来像这样:
class Server : public SqlTableModel {
Q_OBJECT
Q_PROPERTY(Model* model READ model WRITE setModel NOTIFY modelChanged)
Model* _model;
public:
explicit Server(QObject* parent = nullptr)
: SqlTableModel(parent), _model(new Model(this)) {}
signals:
void modelChanged(Model* model);
public:
Model* model() const noexcept { return _model; }
void setModel(Model* m) noexcept { _model = m; }
};
然后您将其称为QML:server.model.loadFromJson("123");
但是,如果您更加努力地解决此后出现的问题,也可以使模型继承private QObject
。
i通过更改继承顺序解决了问题。sqltablemodel-> model->服务器。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 通过方法访问结构
- 最小硬币更换问题(自上而下方法)
- C++为构建时间获取QDateTime的可靠方法
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 有什么方法可以遍历结构吗
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 使用std::函数映射对象方法
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- C++从另一个类访问公共静态向量的正确方法是什么
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 没有为自己的结构调用列表推回方法
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 在类定义之后定义一个私有方法
- 枚举环境变量的惯用C++14/C++17方法
- 初始化具有非默认构造函数的std::数组项的更好方法