我们如何从Qt创建者那里制作自定义Getter?

时间:2014-04-05 10:55:39

标签: qt qt-creator getter getter-setter

如果我们右键点击任何数据成员并转到Refractor - >然后单击Create Getter Setter。 它将Getter ByDefault创建为get + DataMemberName。但我想把Getter作为Qt的大会, 示例: for DataMember carName ByDefault QtCretor将创建 - > getCarName() 但我想 - > CarName()。

可以通过更改某些创作者设置或其他内容来实现。

2 个答案:

答案 0 :(得分:1)

在查看Dominik的回答中提到的/plugins/cppeditor/cppquickfixes.cpp之后,有一个简单的方法:

以任何这些方式为私人数据成员命名

QString m_carName;
QString _carName; // note: using _ to start identifier is questionable (*)
QString carName_;

然后Qt Creator应生成getter carName。请注意,CarName不是Qt约定,但如果您确实需要,请使用m_CarName作为变量名称。

(*)见What are the rules about using an underscore in a C++ identifier?

答案 1 :(得分:0)

一个非常简单的选择是从源代码编译QtCreator并更改文件中的命名规则 /plugins/cppeditor/cppquickfixes.cpp。搜索课程 GenerateGetterSetterOperation 。在构造函数中,此处定义了变量名称 m_ge​​tterName m_setterName

您正在寻找的代码是:

m_getterName = m_baseName != m_variableString
        ? QString::fromLatin1("%1").arg(m_baseName)
        : QString::fromLatin1("get%1%2")
            .arg(m_baseName.left(1).toUpper()).arg(m_baseName.mid(1));
m_setterName = QString::fromLatin1("set%1%2")
        .arg(m_baseName.left(1).toUpper()).arg(m_baseName.mid(1));

您必须将第一部分更改为:

 m_getterName = m_baseName != m_variableString
        ? QString::fromLatin1("%1").arg(m_baseName)
        : QString::fromLatin1("%1%2")
            .arg(m_baseName.left(1).toLower()).arg(m_baseName.mid(1).toUpper());

老实说,我没有检查是否正确。

编辑:海德是绝对正确的。由于时间的限制,我没有检查我深入引用的机制,但是几分钟前就试过了并检查了来源。