是否可以创建自己的Qt注释?

时间:2017-12-11 15:38:01

标签: c++ qt annotations

是否可以像在Java中一样在Qt中创建自己的annoations?

@interface Test {
    boolean value();
}

编辑: 好吧,为了肯定我为什么要这样做,我会稍微罢工并试着解释一下。也许它甚至不可能。

我想创建具有一些属性的类。在GUI应用程序中,我想使用此类并使用QMetaObject动态生成GUI(QML)。

为了限制用户输入,我想添加诸如" minValue"和" maxValue"

但我现在发现的是,没有可能用QMetaObject宣读annoations,因为他们的存在就像@mohabouje所提到的那样存在。有Q_CLASSINFO宏,但这只描述了一个类而不是属性。

有没有办法做到这一点?或者有人可以给我一些提示吗?

2 个答案:

答案 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