Q_DECLARE_FLAGS用法

点击查看代码
class Widget : public QWidget
{
    Q_OBJECT

public:
    enum languageType
    {
        inValidValue=0x0,//无效值(调用testFlag()时这个值是无效的,除0之外)
        cPlusPlus,
        cSharp,
        goLang
    };
    Q_DECLARE_FLAGS(languageTypes,languageType)//第一步
    Widget(QWidget *parent = nullptr);
    ~Widget();
    void flagsTest(languageTypes girl);
private:
    Ui::Widget *ui;
};
Q_DECLARE_OPERATORS_FOR_FLAGS(Widget::languageTypes)//第二步(里面对'|'符号进行了重载,使枚举支持'|'符号)
点击查看代码
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    flagsTest(cPlusPlus|cSharp|goLang);//第三步
}

void Widget::flagsTest(languageTypes language)
{
    if(language.testFlag(cPlusPlus))
    {
        qDebug()<<"cPlusPlus";
    }
    if(language.testFlag(cSharp))
    {
        qDebug()<<"cSharp";
    }
    if(language.testFlag(goLang))
    {
        qDebug()<<"goLang";
    }
}

运行结果:

参考自:https://www.xuebuyuan.com/210160.html

qt帮助手册有详细说明(QFlags)

posted @ 2021-06-23 22:36  youlj  阅读(2199)  评论(1编辑  收藏  举报