这篇文章里面主要讲解了QWidget中的windowFlags这个属性,然后通过函数来设置各种的windowFlags,并看到各种不同的windowFlags所对应的窗口。

        要设置windowFlags这个属性,可以通过函数,

setWindowFlags();

获得windowFlags值可以通过函数


windowFlags();


    在Qt中可以通过自带的一个例子Window Flags Example可以看到各种windowFlags的现象。

下面我们就来分析一下windowFlags这个属性,先看一下Assistant中对windowFlags的介绍:

        这个是Qt的Assistant中对windowFlags的介绍:

        WindowFlags是Qt中类型和窗口系统中零个或者更多的提示的这两者的结合。因此windowFlags这里面有两个因素:

1.   是type

2.   是hints

        然后我们这里不解的是type有哪些,上面举了一个例子是Qt::Dialog,还有就是hint有哪些,上面举了一个例子是Qt::FramelessWindowHint下面我们会讲到这些。

        后面说到,如果一个部件是Qt::Widget或者Qt::SubWindow类型并且自己是一个窗口(例如Qt::Window, Qt::Dialog),那么这个窗口是被放在桌面的(0, 0)位置。如果一个部件是一个窗口,而且类型是Qt::Widget或者Qt::SubWindow,那么他就会放在它的父窗口的(0, 0)的位置。

        然后再Note的部分,还有说明到当调用setWindowFlags改变窗口部件的windowFlags的时候,这个函数会调用setParent这个函数,导致这个函数会被隐藏起来。所以必须要调用show()这个函数是窗口重新变得可见。

下面我们来运行Window Flags Example这个例子:

可以看到界面,可以看到有8种类型:

1.Qt::Window:


2.Qt::Popup

3.Qt::Dialog


4.Qt::Tool


5.Qt::Sheet


6.Qt::ToolTip


7.Qt::Drawer


8.Qt::SplashScreen


 

9.Qt::Window | Qt::CustomizeWindow


下面还有各种组成的部分,大家看看想要那些可以自己组合,然后通过


setWindowFlags();


这个函数来设置。

        上面的8中窗口的类型会有8中不同的类来产生,我们在运用某种类型进行实例化的时候会在构造函数中进行设置相应的Qt::WindowType的。但是旁边的Hints是自己自定义设置的。一般情况下会设置Qt::FramelessWindow,出现的效果如下:

这个时候窗口是不可以移动的,同时窗口也没有了标题栏和最大化最小化按钮。这些都是要用户自己设置的。我在后面的文章中会讲解添加标题栏和最大化最小化按钮。

在下一篇文章里面,我就会分析一下windowFlags的源码实现。