关于Qt::WindowFlags枚举类型的全面解析

    在使用Qt设计的时候经常会看到QWidget控件的构造函数出现下面这样一句话:
    1 QWidget(QWidget *parent=0,Qt::WindowFlags f=0)

    QWidget *parent=0这段代码容易理解,是指父窗口部件的指定。
    Qt::WindowFlags f=0这代码就有一些让人不解了,其实它是指定控件的窗口标识的。值为0即Qt::Widget。

    那么就要好好说说控件的窗口标识的设置了。窗口标识由两部分组成分别是窗口类型和窗口提示hint,一个窗口只有一个窗口类型。窗口提示定义了窗口的外观,可以有多个提示,窗口提示进行按位取或即可。

    要说清楚Qt::WindowFlags枚举类型就必须清楚两个概念:窗口和部件(这样划分便于区分)
    窗口:相对独立的,有子窗口和父窗口之分,主要特点就是窗口有完整的边框,把没有嵌入到其他部件中的部件称为窗口,一般的窗口都有边框和标题栏。
    部件:必须依赖于父窗口而存在,依赖性较强,出现在父窗体的界面内部,它们嵌入在别的窗口中。。

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

    例如:使用其中的Qt::Dialog和Qt::SplashScreen,更改程序中的新建对象的那两行代码:
    QWidget *widget = new QWidget(0, Qt::Dialog);
    QLabel *label = new QLabel(0, Qt::SplashScreen);
    当更改窗口类型后,窗口的样式发生了改变,一个是对话框类型,一个是欢迎窗口类型。
    而对于窗口标志,它主要的作用是更改窗口的标题栏和边框,而且它们可以和窗口类型进行位或操作。下面再次更改那两行代码:
    2    QWidget *widget = new QWidget(0, Qt::Dialog | Qt::FramelessWindowHint);
    3    QLabel *label = new QLabel(0, Qt::SplashScreen | Qt::WindowStaysOnTopHint);
    Qt::FramelessWindowHint用来产生一个没有边框的窗口,而Qt::WindowStaysOnTopHint用来使该窗口停留在所有其它窗口上面。

    在Qt Assistant里面搜索Qt::WindowFlags就会出现其详细的解释。这边摘下其中部分内容:


Qt::Widget               //是一个窗口或部件,有父窗口就是部件,没有就是窗口
Qt::Window               //是一个窗口,有窗口边框和标题
Qt::Dialog               //是一个对话框窗口
Qt::Sheet                //是一个窗口或部件Macintosh表单
Qt::Drawer               //是一个窗口或部件Macintosh抽屉
Qt::Popup                //是一个弹出式顶层窗口
Qt::Tool                 //是一个工具窗口
Qt::ToolTip              //是一个提示窗口,没有标题栏和窗口边框
Qt::SplashScreen         //是一个欢迎窗口,是QSplashScreen构造函数的默认值
Qt::Desktop              //是一个桌面窗口或部件
Qt::SubWindow            //是一个子窗口

//为窗口添加一些功能
Qt::CustomizeWindowHint          //关闭默认窗口标题提示
Qt::WindowTitleHint              //为窗口修饰一个标题栏
Qt::WindowSystemMenuHint         //为窗口修饰一个窗口菜单系统
Qt::WindowMinimizeButtonHint     //为窗口添加最小化按钮
Qt::WindowMaximizeButtonHint     //为窗口添加最大化按钮
Qt::WindowMinMaxButtonsHint      //为窗口添加最大化和最小化按钮
Qt::WindowCloseButtonHint
Qt::WindowContextHelpButtonHint
Qt::MacWindowToolBarButtonHint
Qt::WindowFullscreenButtonHint
Qt::BypassGraphicsProxyWidget
Qt::WindowShadeButtonHint
Qt::WindowStaysOnTopHint
Qt::WindowStaysOnBottomHint
Qt::WindowOkButtonHint
Qt::WindowCancelButtonHint
Qt::WindowTransparentForInput

至此,就介绍完了Qt::WindowFlags枚举类型了,掌握这些会使以后的界面设计更加游刃有余。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值