question:http://qt-project.org/forums/viewthread/13855
class Locale {
public:
enum ENUMList { ... };
enum ENUMFlags { ... };
Q_DECLARE_FLAGS(ENUMFlag, ENUMFlags)
QList<Locale::EnumList> list();
ENUMFlag giveMeFlags();
};
class WrapLocale {
public
QList<Locale::EnumList> returnList() {
return m_locale.list();
}
Locale::ENUMFlag returnFlags() {
return m_locale.giveMeFlags();
}
private:
Locale m_locale;
}
Qt 的QFlags类型
2009-03-12 10:07
Qt里面定义了大量的枚举类型,有些类型的内部元素可以并列的。例如Qt::AlignmentFlag类型,包括
The horizontal flags are:
Qt::AlignLeft 0x0001 Aligns with the left edge.
Qt::AlignRight 0x0002 Aligns with the right edge.
Qt::AlignHCenter 0x0004 Centers horizontally in the available space.
Qt::AlignJustify 0x0008 Justifies the text in the available space.
The vertical flags are:
Constant Value Description
Qt::AlignTop 0x0020 Aligns with the top.
Qt::AlignBottom 0x0040 Aligns with the bottom.
Qt::AlignVCenter
我们可以用Qt::AlignTop | Qt::AlignLeft 来表示左上角。假设一个函数接受位置作为参数,那么一般来说我们需要把这个函数的参数定义成int类型。这样就造成传递给函数的参数非法(132),但是函数却不能静态检查出来。把错误留给了运行阶段。
Qt定义了一个Flag的类,对于一个enum类型,通过声明 Q_DECLARE_FLAGS ( Flags, Enum ) 就会定义一个新的类型Flags。上面的函数就可以用Flags做参数了。
Q_DECLARE_FLAGS ( Flags, Enum ) 扩展成了 typedef QFlags<Enum> Flags;
例如:Qt::AlignmentFlag 就定义了Qt::Alignment作为它的Flags。在使用的时候我们直接定义
setAlignment(Qt::Alignment) 的函数就可以接受 Qt::AlignTop | Qt::AlignLeft 这样的参数了。其他的操作和参考Qt文档 qflags。
http://blog.youkuaiyun.com/dbzhang800/article/details/6734273
本文详细介绍了Qt中的QFlags特性,如何使用Q_DECLARE_FLAGS宏定义新的类型,并通过实例展示了如何利用这些类型来组合枚举值,使得函数参数可以接受多个枚举选项的组合。
4480

被折叠的 条评论
为什么被折叠?



