布局管理
相关内容:
1.分割窗体:QSplitter类
分割器允许用户通过拖动子控件的边界来控制子控件的大小。 任何数量的控件都可以由单个分离器控制。 QSplitter的典型用法是创建多个小部件并使用insertWidget ()或addWidget ()添加它们。
QSplitter * splitter = new QSplitter (parent);
QListView * listview = new QListView ;
QTreeView * treeview = new QTreeView ;
QTextEdit * textedit = new QTextEdit ;
splitter - > addWidget(listview);
splitter - > addWidget(treeview);
splitter - > addWidget(textedit);
构造函数:QSplitter::QSplitter(Qt::Orientation orientation ,QWidget *parent=Q_NULLPTR)
其中第一个参数Orientation表示方向;第二个参数是父对象。
void setStretchFactor(int index ,int stretch);
用于设置可伸缩控件,第一个参数用于指定设置的控件序号,控件序号按照插入的先后顺序从0起依次排序,第二个参数大于0,表示此控件位可伸缩控件,如setStretchFactor(0,0).
2.停靠窗口QDockWidget类
构造函数:QDockWidget(const QString &title, QWidget *parent = Q_NULLPTR, Qt::WindowFlags flags = Qt::WindowFlags())
QDockWidget类提供了一个小部件,可以停靠在QMainWindow或浮动为桌面上的顶级窗口。
QDockWidget提供了dock小部件的概念,也称为工具调色板或实用程序窗口。 Dock窗口是放置在QMainWindow 中心窗口周围的窗口小部件中的辅助窗口 。
设置停靠窗口的一般流程如下:
- 创建一个QDockWidget的对象;
- 设置此停靠窗体的属性,通常调用setFeatures()及setAllowAreas()两种方法。
- 创建一个要插入停靠窗体的控件,通常有QListWidget,QTextEdit.
- 将控件插入停靠窗体,调用QDockWidget的setWidget()方法。
- 使用addDockWidget()方法在MainWindow中加入停靠窗体。
其中:setFeatures(DockWidgetFeature features),包括以下几个参数:
- QDockWidget::DockWidgetClosable:停靠窗体可关闭;
- QDockWidget::DockWidgetMovable:停靠窗体可移动;
- QDockWidget::DockWidgetFloatable:停靠窗体可浮动;
- QDockWidget::AllDockWidgetFeatures:拥有停靠窗体的所有特性;
- QDockWidget::NoDockWidgetFeatures:不可移动,不可浮动,不可关闭。
void setAllowedAreas(Qt::DockWidgetAreas areas)
可停靠区域:
Qt::LeftDockWidgetArea | 0x1 |
Qt::RightDockWidgetArea | 0x2 |
Qt::TopDockWidgetArea | 0x4 |
Qt::BottomDockWidgetArea | 0x8 |
Qt::AllDockWidgetAreas | DockWidgetArea_Mask |
Qt::NoDockWidgetArea | 0 |
各区域设定也可采用或(|)的方式。
3.堆栈窗体QStackedWidget类
QStackedWidget类提供了一组小部件,其中一次只能看到一个小部件。
可以用来创建一个类似于QTabWidget提供的用户界面 。 它是一个方便的布局小部件建立在QStackedLayout类的顶部。
像QStackedLayout , QStackedWidget可以构造和填充一些子窗口小部件(“页”):
QWidget * firstPageWidget = new QWidget ;
QWidget * secondPageWidget = new QWidget ;
QWidget * thirdPageWidget = new QWidget ;
QStackedWidget * stackWidget = new QStackedWidget ;
stackedWidget - > addWidget(firstPageWidget);
stackedWidget - > addWidget(secondPageWidget);
stackedWidget - > addWidget(thirdPageWidget);
QVBoxLayout * layout = new QVBoxLayout ;
layout - > addWidget(stackedWidget);
setLayout(layout);
QStackedWidget没有提供用户切换页面的固有手段。 这通常通过一个QComboBox或一个QListWidget来存储QStackedWidget的页面的标题。 例如:
QComboBox * pageComboBox = new QComboBox ; pageComboBox - > addItem(tr( “Page 1” )); pageComboBox - > addItem(tr( “Page 2” )); pageComboBox - > addItem(tr( “Page 3” )); connect(pageComboBox , SIGNAL(activate( int )) , stackWidget , SLOT(setCurrentIndex( int )));
此处的Index按插入的顺序从0起排序,与QComboBox的条目排序一致。
4.布局管理器
布局常用的方法:addWidget(),addLayout();
addStretch()插入一个占位符;
void QGridLayout::setColumnStretch(int column, int stretch):设置列的占空比。
如:setColumnStretch(0,1);
setColumnStretch(1,3);
可将两列占空比设置为 1:3
拉伸因子相对于该网格中的其他列。 具有较高拉伸系数的列占用更多的可用空间。
默认拉伸系数为0.如果拉伸系数为0,并且此表中的其他列也不能增长,则列可能仍会增长。
另一种方法是使用addItem ()和QSpacerItem添加间距。