【问题标题】:Can we use Q_PROPERTY with template<typename T>?我们可以将 Q_PROPERTY 与 template<typename T> 一起使用吗?
【发布时间】:2016-07-14 10:29:08
【问题描述】:

我想使用 QML 和 C++ 在我的 GUI 上显示template &lt; typename T&gt; 类型的多数据类型值。是否可以将它与Q_PROPERTY 一起使用,或者我应该对每种数据类型使用函数重载并将其传递给Q_PROPERTY

例如:

Q_PROPERTY(int dataread READ dataRead NOTIFY dataChanged)
Q_PROPERTY(float dataread READ dataRead NOTIFY dataChanged)
int dataRead (int data) {return data; }
float dataRead (float data) {return data; }

【问题讨论】:

    标签: c++ qt user-interface qml


    【解决方案1】:

    不,您不能使用带有属性的模板,因为 moc 不支持模板。这已经被讨论过(并且是可行的),但没有足够的兴趣来实施它。

    每个属性还标识一个具体类型,因此您也不能重载它。你可以重载信号和槽,所以这是可行的:

    class foo : public QObject
    {
        Q_OBJECT
        Q_PROPERTY(int intRead READ readInt NOTIFY dataChanged)
        Q_PROPERTY(float floatRead READ readFloat NOTIFY dataChanged)
    
    public:
        int readInt() {return data; }
        float readFloat() {return data; }
    signals:
        void dataChanged(int data);
        void dataChanged(float data);
    ...
    }
    

    请注意,我从您的读取函数中删除了参数。

    【讨论】:

    • dataRead 没有意义,你不能重载返回类型。我也会避免重载信号,因为您将面临 PMF 连接语法的问题。
    猜你喜欢
    • 2012-04-25
    • 2022-01-04
    • 2012-07-13
    • 1970-01-01
    • 2021-06-02
    • 2019-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多