本发明涉及安检设备显控,具体涉及一种基于qt的安检设备显控软件窗口动态布局设计方法。
背景技术:
1、鉴于安检场景的实时性需求,目前安检设备的显控软件主要是基于桌面操作系统开发的应用软件,qt由于其高效的性能和良好的跨平台特性,成为开发安检设备显控软件的首选。安检设备种类繁多,安检场景、安检等级也各不相同,用户时常需要根据实际情况对显控软件界面上的某些元素进行重点关注。为满足用户的定制化需求,显控软件应具备运行时窗口布局动态调整的功能。qt中提供了qdockwidget类来实现可停靠窗口,通过qmainwindow类与qdockwidget类的配合,可部分实现窗口动态布局功能,例如悬浮或停靠子窗口、改变子窗口大小、位置等。
2、qdockwidget类存在着一些缺陷,例如:必须配合qmainwindow类使用,导致主界面之外的其他widget无法进行动态布局调整;在拖放窗口的时候,无法准确地定位需要放置的位置;无法定制子窗口之间的间隔宽度,禁止拖动分隔条则需要将分隔栏宽度设置为0,使得子窗口之间必须紧贴在一起,当界面元素较少时每个元素会占据过多的空间;子窗口处于悬浮状态时使用了默认系统外观,无法根据用户指定的风格进行重绘,可能和程序的整体风格不协调;qdockwidget只能放置在centralwidget的上下左右四个位置,无法实现任意区块内的动态布局功能。为此,提出一种基于qt的安检设备显控软件窗口动态布局设计方法。
技术实现思路
1、本发明所要解决的技术问题在于:如何实现安检设备显控软件窗口的动态布局设计,提供了一种基于qt的安检设备显控软件窗口动态布局设计方法。
2、本发明是通过以下技术方案解决上述技术问题的,本发明包括以下步骤:
3、s1:布局结构设计
4、设计基于qsplitter和二叉树的布局结构;
5、s2:布局算法设计
6、利用布局管理器对窗口布局进行设计,并对窗口悬浮、窗口停靠进行设计。
7、更进一步地,在所述步骤s1中,布局结构中的二叉树满足如下要求:所有的叶子节点处均为子窗口,非叶子节点处均为qsplitter节点;界面包含多个子窗口时,所有非叶子节点有且仅有2个子节点。
8、更进一步地,在所述步骤s2中,窗口布局设计的具体过程如下:
9、s201:开发者给出界面所有子窗口的位置信息;
10、s202:生成界面子窗口位置信息数组p,p中对应区域存入子窗口的指针;
11、s203:以qsplitter节点为所有子窗口的父窗口,即二叉树的根节点,记为s1;
12、s204:以水平或者竖直维度遍历数组p,寻找子窗口的分界线;
13、s205:通过分界线将数组p分为两个子数组p1和p2,如果p1或p2中只有一种窗口指针wn,则直接将wn添加到父节点sp中;否则,添加新的qsplitter节点sx到父节点sp中,并跳到步骤s204。
14、更进一步地,在所述步骤s201中,子窗口的位置信息即子窗口左上角的坐标和尺寸。
15、更进一步地,在所述步骤s204中,在水平维度上,如果对于所有的j,有pi,j≠pi+1,j,则i即为一条水平分界线;在竖直维度上,如果对于所有的i,有pi,j≠pi,j+1,则j即为一条竖直分界线;其中,j表示列坐标,i表示行坐标。
16、更进一步地,在所述步骤s2中,对窗口悬浮进行设计时,窗口悬浮即将该子窗口从布局中删除,也即将二叉树中表示该子窗口的叶子节点删除,记要删除的叶子节点为wd,其父节点为wp,其兄弟节点为wb,则删除叶子节点的步骤如下:
17、s211:删除叶子节点wd和其父节点wp;
18、s212:使wd的兄弟节点wb占据其父节点wp的位置。
19、更进一步地,在所述步骤s2中,对窗口停靠进行设计时,窗口停靠即将该子窗口添加到布局中,也即向二叉树中添加表示该子窗口的叶子节点,记要添加的叶子节点为wa,则添加叶子节点的步骤如下:
20、s221:找到作为停靠参照的子窗口,记其节点为wr;
21、s222:如果节点wr没有兄弟节点,则将要添加的叶子节点wa直接添加到节点wr的父节点wp下;否则,根据停靠位置添加水平或垂直方向的qsplitter节点sx,使sx占据节点wr的位置,并将要添加的叶子节点wa和节点wr作为qsplitter节点sx的子节点。
22、更进一步地,在所述步骤s221中,要添加的叶子节点wa能够停靠在节点wr的上、下、左或右侧。
23、本发明相比现有技术具有以下优点:该基于qt的安检设备显控软件窗口动态布局设计方法,通过使用窗口动态布局管理器,能够在不改变代码的情况下,动态地改变软件界面的布局,特别适用于开发安检设备显控软件这种界面外观需要频繁变动的应用,能够满足用户对软件界面灵活的定制化需求,并且极大地减少开发人员的工作量。
1.一种基于qt的安检设备显控软件窗口动态布局设计方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的一种基于qt的安检设备显控软件窗口动态布局设计方法,其特征在于:在所述步骤s1中,布局结构中的二叉树满足如下要求:所有的叶子节点处均为子窗口,非叶子节点处均为qsplitter节点;界面包含多个子窗口时,所有非叶子节点有且仅有2个子节点。
3.根据权利要求2所述的一种基于qt的安检设备显控软件窗口动态布局设计方法,其特征在于:在所述步骤s2中,窗口布局设计的具体过程如下:
4.根据权利要求3所述的一种基于qt的安检设备显控软件窗口动态布局设计方法,其特征在于:在所述步骤s201中,子窗口的位置信息即子窗口左上角的坐标和尺寸。
5.根据权利要求3所述的一种基于qt的安检设备显控软件窗口动态布局设计方法,其特征在于:在所述步骤s204中,在水平维度上,如果对于所有的j,有pi,j≠pi+1,j,则i即为一条水平分界线;在竖直维度上,如果对于所有的i,有pi,j≠pi,j+1,则j即为一条竖直分界线;其中,j表示列坐标,i表示行坐标。
6.根据权利要求1所述的一种基于qt的安检设备显控软件窗口动态布局设计方法,其特征在于:在所述步骤s2中,对窗口悬浮进行设计时,窗口悬浮即将该子窗口从布局中删除,也即将二叉树中表示该子窗口的叶子节点删除,记要删除的叶子节点为wd,其父节点为wp,其兄弟节点为wb,则删除叶子节点的步骤如下:
7.根据权利要求1所述的一种基于qt的安检设备显控软件窗口动态布局设计方法,其特征在于:在所述步骤s2中,对窗口停靠进行设计时,窗口停靠即将该子窗口添加到布局中,也即向二叉树中添加表示该子窗口的叶子节点,记要添加的叶子节点为wa,则添加叶子节点的步骤如下:
8.根据权利要求7所述的一种基于qt的安检设备显控软件窗口动态布局设计方法,其特征在于:在所述步骤s221中,要添加的叶子节点wa能够停靠在节点wr的上、下、左或右侧。
