QT 属性 - 语法糖或开发工具 [关闭]

Posted

技术标签:

【中文标题】QT 属性 - 语法糖或开发工具 [关闭]【英文标题】:QT Properties - Syntactic Sugar or Development Tools [closed] 【发布时间】:2012-09-16 20:49:34 【问题描述】:

我相信你们所有人都在那个时候 - 定义一个带有大量 Q_PROPERTIESQ_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 [关闭]

Visual Studio Code开发Qt应用程序实现自动提示语法高亮代码导航编译和调试

Qt 属性浏览器框架或 python 中的类似工具

Qt 开发 MS VC 控件终极篇