gpt4 book ai didi

c++ - 如何实现像 Qt::LeftDockWidgetArea 这样的枚举名称

转载 作者:太空狗 更新时间:2023-10-29 23:46:35 27 4
gpt4 key购买 nike

当使用 Qt 时,许多函数都接受一个参数,例如标志 Qt::LeftDockWidgetArea。

即使我查看了 Qt 源代码,我也无法理解如何实现这种命名行为。它是通用的 C++ 还是特定于 Qt 的?

假设我有一个类 MyClass:

class MyClass {
public:
MyClass();
void setFlag(???);
};

我想像这样调用 setFlag 方法:

MyClass mc;
mc.setFlag(MyClass::flag1 | MyClass::flag2)

flag1 和 flag2 应该只是 0x01 和 0x02,这是枚举吗?我必须在哪里声明?方法的参数是什么?

如果这很明显,我很抱歉,但我不明白。

解决方案(来自答案)

很好。通过阅读下面的答案,我添加了这个:(请注意,我并不是真的需要标志,只需要枚举中的数字,这大大简化了它)

namespace MyNames {
typedef enum {
FA = 0,
FB = 1
} Field;
}

class MyClass
{
public:
MyClass();
char getField(MyNames::Field f) const;
};

这确实允许以下调用(不是):

mc.getField(MyNames::FA) //OK
mc.getField(1) //not OK

最佳答案

看看 Qt::LeftDockWidgetArea 的定义:

enum DockWidgetArea {
LeftDockWidgetArea = 0x1,
RightDockWidgetArea = 0x2,
TopDockWidgetArea = 0x4,
BottomDockWidgetArea = 0x8,

DockWidgetArea_Mask = 0xf,
AllDockWidgetAreas = DockWidgetArea_Mask,
NoDockWidgetArea = 0
};

Q_DECLARE_FLAGS(DockWidgetAreas, DockWidgetArea)

请注意 Q_DECLARE_FLAGS 宏,它通过创建 QFlags typedef 实现您所询问的行为。参见 http://qt-project.org/doc/qt-4.8/qflags.html#Q_DECLARE_FLAGS .

关于c++ - 如何实现像 Qt::LeftDockWidgetArea 这样的枚举名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10328954/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com