(三十三)容器组件

容器组件(Containers Widgets)

Qt中有9种容器组件:QGroupBox组合框、QFrame框架、QScrollArea滚动区、QToolBox工具箱、QTabWidget切换卡、QStackedWidget栈式组件、QWidget、QMdiArea MDI窗口显示组件、QDockWidget停靠窗体

 

QGroupBox

简介

1、QGroupBox为构建分组框提供了支持

2、组合框通常带有一个边框和一个标题栏,作为容器部件来使用

3、在其中可以布置各种窗口部件。

4、其标题通常在上方显示,其位置可以设置为靠左、居中、靠右、自动调整这几种方式之一

5、位于分组框之中的窗口部件可以获得应用程序的焦点。

 

QFrame

简介

1、  QFrame是带有边框的组件的基类

2、  带边框组件最主要的特点是可以有一个明显的边界框架

3、  QFrame类对象可以作为一个不含任何内容的简单占位符

4、  QFrame类及其派生类都可以拥有不同边框效果(由enum QFrame::Shapeenum QFrame::Shadow组合完成)

 

enum QFrame::Shape可取值

QFrame::NoFrame

QFrame什么也不绘制

QFrame::Box

QFrame在它内容四周绘制一个边框

QFrame::Panel

QFrame绘制一个使内容表现为凸起或凹陷的面板

QFrame::StyledPanel

绘制一个效果依赖于当前GUI样式的矩形面板,面板可以是凸起或者凹陷的

QFrame::HLine

QFrame绘制一条没有任何框架的水平线(可以作为分离器)

QFrame::VLine

QFrame绘制一条没有任何框架的垂直线(可以作为分离器)

QFrame::WinPanel

绘制一个类似windows2000的可以是凸起或者凹陷的矩形面板(指定这个形状并设置线宽为2像素),为了兼容性WinPanel也被提供,为了GUI风格的独立性,建议使用QFrame::StyledPanel代替

 

QFrame::Shadow可取值

QFrame::Plain

边框和内容表现为与四周的组件在同一高度,使用调色板QPalette::WindowText绘制颜色(不含任何3D效果)

QFrame::Raised

边框和黑荣表现为凸起,使用当前颜色组的亮、暗色绘制一个3D的凸起线条

QFrame::Sunken

边框和内容表现为凹陷,使用当前颜色组的亮、暗色绘制一个3D的凹陷线条

 

一些风格和线宽的组合:


lineWidth是边框边界线宽度,midLineWidth是在边框中插入的额外线条的宽度,这条线条使用第三种颜色以获得特殊的3D效果,注意: 凸起或者凹陷的Box、HLine和VLine框架才能绘制mid-line

 

QScrollArea

简介

1、QSCrollArea提供了在其他widget上提供了一个滚动视图

2、滚动区用来在框架内显示一个子widget的内容

3、当widget超过了框架的尺寸,视图会提供一个滚动条以便显示子widget的整个区域

 

使用

必须通过成员函数

void

setWidget ( QWidget * widget )

来设置子widget

通过

QWidget *

widget () const

可以获取子widget,此函数返回0时表明没有子widget

而函数

QWidget *

takeWidget ()

可以移除子widget

函数

void

setWidgetResizable ( bool resizable )

决定了滚动区域可以自动重置视图大小,默认为false,为true时,滚动区会自动调整子widget大小。可以不顾这个值而通过widget()->resize(),即获取子widget再手动设置其子widget大小

 

QToolBox

详细描述

QToolBox提供了一种列状的层叠窗体(利用QToolBox科实现抽屉效果)

 

QToolBox是一个显示一列层叠Tab的组件,QToolBox中当前项在当前tab下显示。每个tab都在tab列中有一个下标位置。tab的项是一个QWidget

 

每个项都有一个 itemText()、一个可选的 itemIcon()、一个可选的itemToolTip()、和一个widget()函数 。项的属性可以通过 setItemText()、setItemIcon()、和setItemToolTip()来改变,并且每个项可以通过setItemEnabled()单独设置为是否可用。

 

项的添加使用addItem(),或通过insertItem()在特定位置插入。通过调用count()可以获取项的总数。可以通过使用 removeItem()将项从toolbox中删除。结合 removeItem()和 insertItem() ,可以将项移动到不同的位置。

 

当前项部件的下标由 currentIndex()返回,并可由setCurrentIndex()设置。一个特定项的下标可以使用 indexOf(),来获取,item()则返回给定下标的项。

 

当前的项发生变化时,会发射currentChanged() 信号。

 

QTabWidget

简介

QTabWidget提供了一个栈式选项卡窗体

前面描述过,也就不赘述了

 

QstackedWidget

简介

QStackedWidget提供了一个在一个时刻只有一个widget可见的堆栈窗体,其布局管理器为QStackedLayout

前面描述过,也就不赘述了

 

QWidget

QWidget类是所有用户界面对象的基类

 

这里还是直接引用dbzhang800的博客吧

漫谈QWidget及其派生类(一)http://blog.csdn.net/dbzhang800/article/details/6737540

 

漫谈QWidget及其派生类(二)http://blog.csdn.net/dbzhang800/article/details/6741344

漫谈QWidget及其派生类(三)http://blog.csdn.net/dbzhang800/article/details/6744650

漫谈QWidget及其派生类(四)http://blog.csdn.net/dbzhang800/article/details/6745089

 

QMdiArea

术语介绍:MDI即Multiple Document Interface多文档界面

简介:

1、  QMdiArea组件提供了一个显示MDI窗口的区域

2、  QMdiArea通常被用来作为QMainWindow的中心组件,也即是说需要QMainWindow对象以QMdiArea对象为参数调用

void QMainWindow::setCentralWidget ( QWidget * widget )

 

3、  QMdiArea也可以被放置在任何布局管理器中

4、  QMdiArea中的SubWindows是QMdiSubWindow类对象

5、  使用QMdiSubWindow * QMdiArea::addSubWindow ( QWidget * widgetQt::WindowFlagswindowFlags = 0 )

可以将SubWindow直接加入到MDI区域,加入的对象也可以是QWidget及其子类,当加入的是QWidget或子类对象时,会自动创建SubWindow并将QWidget或子类对象设置为SubWindow的内部widget

6、  当QMdiArea中的SubWindow接收到鼠标、键盘焦点或是通过void QWidget::setFocus ( Qt::FocusReason reason )

获得的焦点SubWindow变为活跃窗口,通过QMdiSubWindow * QMdiArea::activeSubWindow ()const

可获得当前活跃的SubWindow

7、  当活跃的SubWindow改变时,QMdiArea会发送subWindowActivated() 信号

 

 

注:

1、创建SubWindows最简单的创建方式是调用QMdiArea::addSubWindow()函数或者可以自己创建一个SubWindows并调用

void QMdiSubWindow::setWidget ( QWidget * widget )

函数(可参见帮助文档中的QMdiSubWindow类)

 

2、void QMdiArea::removeSubWindow( QWidget * widget )不会删除SubWindows内部的widget(但会删除SubWindows),这一情况可能导致在某些情况下程序占用大量内存,需要设Qt::WA_DeleteOnClose 属性

    QMdiArea mdiArea;
    QMdiSubWindow *subWindow1 = new QMdiSubWindow;
    subWindow1->setWidget(internalWidget1);
     subWindow1->setAttribute(Qt::WA_DeleteOnClose);
    mdiArea.addSubWindow(subWindow1);
 
    QMdiSubWindow *subWindow2 =
        mdiArea.addSubWindow(internalWidget2);


 

3、点击SubWindows的关闭按钮并不会引发QMdiArea调用removeSubWindow(),只是隐藏隐藏

 

QDockWidget

简介

QDockWidget提供了一个可在QMainWindow内部停靠或者浮动在桌面的顶层窗口组件

前面描述过,也就不赘述了

 


版权声明:本文为Hello_World_LVLcoder原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。