QT 属性 - 语法糖或开发工具 [关闭]
Posted
技术标签:
【中文标题】QT 属性 - 语法糖或开发工具 [关闭]【英文标题】:QT Properties - Syntactic Sugar or Development Tools [closed] 【发布时间】:2012-09-16 20:49:34 【问题描述】:我相信你们所有人都在那个时候 - 定义一个带有大量 Q_PROPERTIES
的 Q_OBJECT
,所有这些都带有相当微不足道的访问器:
class ORM_Customer : public QDjangoModel
Q_OBJECT
Q_PROPERTY(QString firstname READ firstname WRITE setFirstname)
Q_PROPERTY(QString lastname READ lastname WRITE setLastname)
Q_PROPERTY(QString phone READ phone WRITE setPhone)
Q_PROPERTY(QString address1 READ address1 WRITE setAddress1)
Q_PROPERTY(QString address2 READ address2 WRITE setAddress2)
Q_PROPERTY(QString houseno READ houseno WRITE setHouseno)
Q_PROPERTY(QString postcode READ postcode WRITE setPostcode)
[... snip ...]
大量的访问器看起来都是这样的:
QString ORM_Customer::firstname() const return m_firstname;
QString ORM_Customer::lastname() const return m_lastname;
void ORM_Customer::setFirstname(QString &n) m_firstname = n;
void ORM_Customer::setLastname(QString &n) m_lastname = n;
鉴于 QDjangoModel 使用 MetaObject 自省,我不能在这里依赖动态属性(此外,我喜欢静态属性) - 问题是,是否有任何工具可以节省我的体力劳动?
Qt Creator 似乎没有选择只声明和定义一些默认访问器和它们各自的私有变量.. 还有什么?它肯定会困扰更多的开发人员,而不仅仅是我自己。
或者也许只是其他人使用的另一种开发模式?
【问题讨论】:
是的,这一直困扰着我。 Q_PROPERTY 在我看来总是糖。您总是可以拥有一个具有通用 get/set 函数的 QVariantMap 成员。或者,如果您愿意,可以自定义enum
和成员 QHash<int, QVariant>
。
我会考虑 Q_PROPERTY 的唯一情况是为 Designer 开发插件时。
【参考方案1】:
我不知道有什么工具,抱歉。但是,当 Qt 5.1 准备就绪时,您可能会对它感到满意,因为它扩展了“moc”编译器。请参阅Qt 5.1 feature list 中的“基本模块 -> moc”部分:
Q_PROPERTY 中的新关键字:MEMBER 让您可以将属性绑定到类成员,而无需使用 getter 或 setter。
【讨论】:
以上是关于QT 属性 - 语法糖或开发工具 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
我想开始 Qt 开发 - 我必须拥都有哪些 C++ 和 OS 基础知识? [关闭]
将 Qt Creator 与 Microsoft 工具链一起使用时是不是存在严重问题? [关闭]
比较 GTK+、Qt 和 MATLAB 为 C++ 编写的科学程序开发 GUI [关闭]