• QT枚举类型与字符串类型相互转换


    Qt5以后(具体版本可能是5.10吧,这个不确定)采用以下方法

    https://www.cnblogs.com/dongc/p/5630444.html

    在QT中将枚举类型注册(QT_Q_ENUM或QT_Q_FLAG)后,就可以利用QT的元对象进行枚举类型与字符串类型转换了。

    代码示例:

    复制代码
    #include <QtCore/QMetaEnum>
    
    int main() {
        QMetaEnum metaEnum = QMetaEnum::fromType<Qt::Alignment>();
    
        //字符串转枚举值
        Qt::Alignment alignment = (Qt::Alignment)metaEnum.keyToValue("Qt::AlignLeft");
        alignment = (Qt::Alignment)metaEnum.keysToValue("Qt::AlignLeft | Qt::AlignVCenter");
    
        //枚举值转字符串
        const char* s = metaEnum.valueToKey(Qt::AlignCenter);
        return 0;
    }
    复制代码

    在qss中我们可以这样使用枚举类型:

    QTabBar#CustomTabBar {
        /* Qt::AlignmentFlag定义 */
        qproperty-text_align: "AlignLeft | AlignVCenter";
    }

     QT中判断信号是否与槽连接:

    QPushButton btn;
    int receivers = btn.receivers(SIGNAL(clicked(bool));

    qt4.8则采用以下方法:

    https://www.cnblogs.com/FindSelf/p/4901520.html

    一、enum 自省

    1
    2
    3
    const QMetaObject &mo = [ClassName]::staticMetaObject;
    int index = mo.indexOfEnumerator("[EnumName]");
    QMetaEnum me = mo.enumerator(index);

    若 enum 定义在当前类中,则可以简写为

    1
    2
    int index = staticMetaObject.indexOfEnumerator("[EnumName]");
    QMetaEnum me = staticMetaObject.enumerator(index);

    二、enum 转换

    1、 enum <-> int

    1
    enum Color { Red, White, Blue};Color c = (Color)1;   //c=Whiteint i = Red;       //i=0

    2、 enum <-> string

    1
    enum Color { Red, White, Blue};
    1
    QString s = "White";
    1
    int idx = mo.indexOfEnumerator("Color");
    QMetaEnum iEnum = mo.enumerator(idx);
    int val = iEnum.keysToValue(s.toAscii());
    1
    Color c = (Color)val ;

    如果是自定义类中的自定义枚举,如下操作

    class [ClassName]:public QObject
    {
        Q_OBJECT
        Q_ENUMS([EnumName])
    public:
        enum [EnumName]{
            client_1=0,
            client_2,
            client_3,
            client_4
        };
    };

    使用的时候:
                const QMetaObject &mo=[ClassName]::staticMetaObject;
                        int index = mo.indexOfEnumerator("[EnumName]");
                        QMetaEnum metaEnum = mo.enumerator(index);
                const char *c=metaEnum.valueToKey(*****);

    这里注意在class T内声明中添加Q_OBJECT 宏会经常有出现以下错误

    undefined reference to staticMetaObject

    解决办法:
    重新执行qmake,记住每次你添加或者移除Q_GADGET or Q_OBJECT宏,一定要重新执行一遍qmake,问题就解决了。切记!!!

  • 相关阅读:
    解决Manjaro i3社区版 compton默认配置不正确的问题
    Manjaro 18.1.5 i3社区版安装后初步配置
    Manjaro Linux 18 中安装配置搜狗拼音输入法
    博客园美化(最全)
    vritulbox中linux安装zookeeper报错:
    eclipse中springmvc框架出现404
    ajax
    JSP
    请求转发和重定向的区别:
    本周授课内容:http,https,Tomcat,servlet
  • 原文地址:https://www.cnblogs.com/liushui-sky/p/8563223.html
Copyright © 2020-2023  润新知