- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试简化(即摆脱大量样板代码)在必须标记为“INVOKABLE”的类中创建函数。
(非常像另一个问题 other question )
从小处着手,我只是尝试使用一个函数:
#define CONCAT_NOEXPAND(A, B) A ## B
#define CONCAT(A, B) CONCAT_NOEXPAND(A, B)
#define HANDLER_PREFIX handler_
#define HANDLER_SIGNATURE (QString action, QString parameters)
#define GENERATE_HANDLER_SIGNATURE(ACTION) CONCAT(HANDLER_PREFIX, ACTION) HANDLER_SIGNATURE
#define GENERATE_HANDLERS(NAME) void GENERATE_HANDLER_SIGNATURE(NAME);
class Test : public QObject
{
Q_OBJECT
public:
explicit Test(QObject *parent = nullptr);
private:
Q_INVOKABLE void handler_Test1 (QString, QString); // Ok
Q_INVOKABLE GENERATE_HANDLERS(Test2) // Error!!
}
使用 MACRO GENERATE_HANDLERS
会产生以下错误:
#define HANDLER_PREFIX handler_
我还尝试将 Q_INVOKABLE
直接包含在 MACRO GENERATE_HANDLERS
中,这导致代码可以编译但函数不会被导出。
有什么想法吗?
最佳答案
Q_INVOKABLE 由元对象编译器 (moc) 处理,它本身不会展开宏,而是在展开宏之前运行,因此它看不到您的宏。
关于c++ - 使用宏创建 Q_INVOKABLE 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46221543/
我有一个派生自的基类。该基类 (BaseClass) 是一个纯 c++ 类(不是从 QObject 派生的)并实现了方法,我想将这些方法原封不动地提供给我的 QML 接口(interface)。 假设
这是我的 C++ 函数 头文件: Q_INVOKABLE void setSelection(qint64 start, qint64 end, qint64 init); 主体文件: void Se
这是我的 C++ 函数 头文件: Q_INVOKABLE void setSelection(qint64 start, qint64 end, qint64 init); 主体文件: void Se
试图了解基于 Qt/QML 的应用程序的最佳实践,其中我们将方法标记为 Q_INVOKABLE。如果我们从其中一种方法中抛出异常,会有什么后果? class Class { ... Q
这个问题在这里已经有了答案: QObject Multiple Inheritance (3 个答案) 关闭 3 年前。 我有一个有趣的问题。我不知道如何组合从 QObject 继承的两个类。在基类
我在调用 Q_INVOKABLE 函数时遇到 QML 问题。尽管我将函数标记为 Q_INVOKABLE,但我遇到了错误 TypeError: Result of expression 'azdownl
我正在尝试简化(即摆脱大量样板代码)在必须标记为“INVOKABLE”的类中创建函数。 (非常像另一个问题 other question ) 从小处着手,我只是尝试使用一个函数: #define CO
我想从 QML 调用 C++ 方法,将参数传递给它。据我所知,我应该用宏 Q_OBJECT 标记类,用 Q_INVOKABLE 标记所需的公共(public)函数。 虽然我这样做了,但我仍然遇到运行时
我有一个 C++ 方法 Q_INVOKABLE。我可以从 QML 调用此方法,它在返回基本类型(如 QString)时有效。但我不能使用自定义类型。我应该怎么做?我应该返回一个 QVariant 吗?
众所周知,在 JavaScript 中,所有函数都可以接受任意数量的参数。 在 Qt 中,您可以使用 Q_INVOKABLE 标记 QObject,其方法可从 QML 访问。例如: class myO
我有一个非常简单的任务导致绕圈子,主要是因为 QML 和 QT 的 C++ 端的分离。因此,我不需要询问具体的 QT 问题,而是需要关于应该使用哪些 QT 和 QML 函数来实现我的用例的一般性建议。
我正在尝试测试 QQmlPropertyMap 类。如果我可以将它子类化,它似乎可以很好地满足我的需求。文档 here甚至给出了一些关于如何对其进行子类化的基本说明。所述文档还指出此类派生自 QObj
我有一个带有 Q_INVOKABLE 方法的 MasterController QObject,该方法返回对 MyType 对象的 const 引用,这是从 QObject 派生的另一种类型。我在 m
我有一个 Qt 函数: void MainWindow::button_clicked(Qstring a, Qstring b, Qstring c, Qstring d) 我从 QML 收集数据,
我刚刚意识到我几乎可以调用公开给 QML 的对象的任何函数。现在我对 Q_INVOKABLE 很好奇。 Qt5 docs状态: [...] any QML code can access the fo
我有简单的 c++ 类方法: Q_INVOKABLE const QString& getRiderTypeName(const int& riderTypeIndex) const; 及其实现: c
我是一名优秀的程序员,十分优秀!