12
我无法理解Q_PROPERTY的用法。 Q_PROPERTY如何帮助制定计划防御?它是干什么用的?我看过论坛,但实际上无法做到它的应用。我已经理解了这个例子,但不是它的用法。Q_PROPERTY在Qt中有什么意义?
下面是一个例子,我能从中获得什么。我明白阅读只会给读者一种特权。
write属性将赋予只写权限。但是它的需求是什么?有人可以举例说明吗?
class MyClass : public QObject
{
Q_OBJECT
Q_PROPERTY(Priority priority READ priority WRITE setPriority NOTIFY priorityChanged)
Q_ENUMS(Priority)
public:
MyClass(QObject *parent = 0);
~MyClass();
enum Priority { High, Low, VeryHigh, VeryLow };
void setPriority(Priority priority)
{
m_priority = priority;
emit priorityChanged(priority);
}
Priority priority() const
{ return m_priority; }
signals:
void priorityChanged(Priority);
private:
Priority m_priority;
};
关于第一点,如果我们已经生成了一个接口,它可以被内省。没有必要在那里指定属性。关于QML,如果我们声明了Q_INVOKABLE或SLOT,那么它可以由QML调用。 QProperty如何影响到那里?第二点,我同意它可以做更多。第三点,我不明白。 –
@SHREYASJOSHI:槽通常用于无效返回值。对于每种方法,Q_INVOKABLE将是单调乏味的。此外,内省不仅仅是从QML中使用它,而且即使你可以这样做,你也不会将它用作来自QML的真实属性,而是函数调用。这会很烦人。第三点:编写自己的getter/setter时,通常是相同的样板文件是没有意义的。 Qt 5会自动为您生成。 – lpapp
+1 for *“不需要在普通读写情况下用Qt 5编写样板”*,不知道它。但是你有链接记录吗? (我找不到任何有关这方面的信息,例如[here](http://qt-project.org/doc/qt-5.0/qtcore/properties.html)。) – hyde