我们可以将 Q_PROPERTY 与 template<typename T> 一起使用吗?
Posted
技术标签:
【中文标题】我们可以将 Q_PROPERTY 与 template<typename T> 一起使用吗?【英文标题】:Can we use Q_PROPERTY with template<typename T>? 【发布时间】:2016-07-14 10:29:08 【问题描述】:我想使用 QML 和 C++ 在我的 GUI 上显示template < typename T>
类型的多数据类型值。是否可以将它与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;
【问题讨论】:
【参考方案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 连接语法的问题。以上是关于我们可以将 Q_PROPERTY 与 template<typename T> 一起使用吗?的主要内容,如果未能解决你的问题,请参考以下文章
来自其他 QThread 的 Q_PROPERTY 将变量发送到 QML