是否可以像在Java中一样在Qt中创建自己的annoations?
@interface Test {
boolean value();
}
编辑: 好吧,为了肯定我为什么要这样做,我会稍微罢工并试着解释一下。也许它甚至不可能。
我想创建具有一些属性的类。在GUI应用程序中,我想使用此类并使用QMetaObject
动态生成GUI(QML)。
为了限制用户输入,我想添加诸如" minValue"和" maxValue"
但我现在发现的是,没有可能用QMetaObject
宣读annoations,因为他们的存在就像@mohabouje所提到的那样存在。有Q_CLASSINFO
宏,但这只描述了一个类而不是属性。
有没有办法做到这一点?或者有人可以给我一些提示吗?
答案 0 :(得分:1)
我不知道你为什么要这样做,这是C ++,而不是Java。顺便说一句,替代方法是使用#defines,它可以为您提供近似的解决方案:
#define INTERFACE virtual
#define DECL_INTERFACE = 0
#define OVERRIDE override
#define IMPLEMENTS : public
然后在你的界面类中你可以这样做:
class InterfaceClass {
INTERFACE std::string compute() DECL_INTERFACE;
INTERFACE void something_else() DECL_INTERFACE;
}
在您的子课程中:
class Subclass IMPLEMENTS InterfaceClass {
std::string compute() OVERRIDE {
....
}
void something_else() OVERRIDE {}
}
答案 1 :(得分:1)
对于方法,可以使用tag属性添加注释
https://doc.qt.io/qt-5/qmetamethod.html#tag
从文件中复制:
#ifndef Q_MOC_RUN
// define the tag text as empty, so the compiler doesn't see it
# define MY_CUSTOM_TAG
#endif
...
private slots:
MY_CUSTOM_TAG void testFunc();
-
MainWindow win;
win.show();
int functionIndex = win.metaObject()->indexOfSlot("testFunc()");
QMetaMethod mm = win.metaObject()->method(functionIndex);
qDebug() << mm.tag(); // prints MY_CUSTOM_TAG