学习QT之Qt::WindowFlags枚举类型详解

在使用Qt设计的时候经常会看到QWidget空间的构造函数出现下面这样一句话:

QWidget(QWidget *parent=0,Qt::WindowFlags f=0);

  1. QWidget parent这段代码容易理解,是指父窗口部件的指定。
  2. Qt::windowFlags f=0这段代码就有一点不解了,其实他是指定控件的窗口标识的。值为0 Qt::Widget。*
  3. 那么就要好好说说控件的窗口标识的设置了。窗口标识由两部分组成,分别是窗口类型和窗口提示hint,一个窗口只有一个窗口类型。窗口提示定义了窗口的外观,可以有多个提示,窗口提示进行按位取或即可。`
  4. 要说清楚Qt::WindowFlags枚举类型就必须清楚两个概念:窗口和部件`
  5. 窗口:相对独立,有子窗口和父窗口之分,主要特点就是窗口有完整的边框。`
  6. 部件:必须依赖父窗口而存在,依赖性较强,出现在父窗体的界面内部。`

有了上述的概念就好解释Qt::WindowFlags枚举类型的用法了。首先判断一个控件是否是窗体,先根据参数parent的指定,要是值为0那么就可以判断其是一个窗口。否则需要根据Qt::WindowFlags枚举类型的值才可以判断其是否为窗口还是部件。

窗口类型说明
Qt::WidgetQWidget构造函数的默认值,如果新的窗口部件没有父窗口部件,则它是一个独立的窗口,否则就是一个子窗口部件。
Qt::Window无论是否有父窗口部件,新窗口部件都是一个窗口,通常有一个窗口边框和一个标题栏。
Qt::Dialog新窗口部件是一个对话框,它是QDialog构造函数的默认值。
Qt::Sheet新窗口部件是一个Macintosh表单(sheet)。
Qt::Drawer新窗口部件是一个Macintosh抽屉(drawer)。
Qt::Popup新窗口部件是一个弹出式顶层窗口。
Qt::Tool新窗口部件是一个工具窗口,它通常是一个用于显示工具按钮的小窗口。如果一个工具窗口有父窗口部件,则它将显示在父窗口部件的上面,否则,将相当于使用了Qt::WindowStayOnTopHint提示。
Qt::ToolTip新窗口部件是一个提示窗口,没有标题栏和窗口边框。
Qt::SplashScreen新窗口部件是一个欢迎窗口,它是QSplashScreen构造函数的默认值。
Qt::Desktop新窗口部件是桌面,它是QDesktopWidget构造函数的默认值。
Qt::SubWindow新窗口部件是一个子窗口,而无论该窗口部件是否有父窗口部件。
窗口提示说明
Qt::MSWindowsFiredSizeDialogHint为Windows系统上的窗口装饰一个窄的对话框边框,通常这个提示用于固定大小的对话框。
Qt::MSWindowsOwnDC为Window系统上的窗口添加自身的显示上下文菜单
Qt::X11BypassWindowManagerHint完全忽视窗口管理器,它的作用是产生一个根本不被管理的无窗口边框的窗口(此时,用户无法使用键盘进行输入,除非手动调用QWidget::activateWindow函数)。
Qt::FramelessWindowHint产生一个无窗口边框的窗口,此时用户无法移动该窗口和改变它的大小
Qt::CustomizeWindowHint关闭默认的窗口标题提示。
Qt::WindowTitleHint为窗口装饰一个标题栏。
Qt::WindowSystemMenuHint为窗口添加一个窗口系统菜单,并尽可能地添加一个关闭按钮
Qt::WindowMinmizeButtonHint为窗口添加一个"最小化"按钮
Qt::WindowMaximizeButtonHint为窗口添加一个"最大化"按钮
Qt::WindowMinMaxButtonsHint为窗口添加一个"最小化"按钮和一个"最大化"按钮。
Qt::WindowContextHelpButtonsHint为窗口添加一个"上下文帮助"按钮
Qt::WindowStaysOnTopHint告知窗口系统,该窗口应该提留在所有其他窗口的上面。
Qt::WindowType_Mask一个用于提取窗口标识中的窗口类部分的掩码。

注意:窗口提示仅对顶层窗口有效。

枚举类型Qt::WindowFlags低位的1个字节用于定于窗口部件的窗口类型,0x00000000~0x00000012共定义了11个窗口类型。Qt::WindowFlags的高位字节定义了窗口提示,窗口提示能够进行按位或操作,例如:Qt::windowContextHelpButtonHint | Qt::windowMaximizeButtonHint

放Qt::WindowFlags的窗口提示部分全部为0时,窗口提示不起作用。当有一个窗口提示被应用时,若要其他的窗口提示起作用,则必须使用位或操作(如果窗口系统支持这些窗口提示的话)。例如:

  1. Qt::windowFlags flags = Qt::window;
  2. widget->setWindowFlags(flags);

widget窗口部件是一个窗口,它有一般窗口的外观(有窗口边框、标题栏、“最小化”按钮、“最大化”按钮和“关闭”按钮等),此时窗口提示不起作用。例如:

  1. flags |= Qt::WindowTitleHint;
  2. widget->setWindowFlags(flags);

上述代码的执行将会使窗口体术发挥作用。在Windows系统中,widget窗口部件是一个窗口。它仅有标题栏,没有“最小化”按钮、“最大化”按钮和“关闭”按钮等。而X11窗口管理器忽略了窗口提示Qt::WindowTitleHint,例如,在红旗Linux工作站和SUSE系统上,上述代码并不起作用。

在Windows系统中,如果需要天剑一个"最小化"按钮,则必须重新设置窗口部件的窗口标识,具体如下:

  1. flags |= Qt::WindowMinimizeButtonHint;
  2. widget->setWindowFlags;

如果要取消设置的窗口0提示,则具体代码如下:

  1. flags &= Qt::WindowType_Mask;
  2. widget->setWindowFlags(flags);

说了这么多了,我们来看一下具体怎么使用吧。
this->setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint);
如果想去掉某个属性就直接加~就可以
this->setWindowFlags(windowFlags() & ~Qt::WindowMaximizeButtonHint);//去掉最大化按钮

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值