20201017目录
布局管理(分割窗口 / 停靠窗口 / 堆栈窗口)
1. 分割窗口 QSplitter类
新建:Qt Widgets Application
项目名称:Splitter
类名:MainWindow
基类:QMainWindow
不选择“创建界面”复选框
涉及函数/方法:setOpaqueResize():设定分割窗口的分隔条是否为实时更新显示。true为实时更新显示,false为拖拽时显示灰色粗线条。
【main.cpp】源码如下:
#include "mainwindow.h"
#include <QApplication>
#include <QSplitter> //添加头文件
#include <QTextEdit>
#include <QTextCodec>
#include <QFont>
int main(int argc, char *argv[])//这里是应用程序的入口。几乎所有使用Qt的情况下,main()函数只需在将控制转交给Qt库之前执行初始化,然后Qt库通过事件向程序告知用户的行为。//所有Qt程序必须有且只有一个main()函数。argc是命令行变量的数量,argv是命令行变量的数组。
{
QApplication a(argc, argv); //a是创建的QApplication类的对象,用来处理命令行变量。所有被Qt识别的命令行参数都将从argv中移去,argc也因此减少
QFont font("ZYSong18030",12);
a.setFont(font); //设置字体及大小
//1.主分割窗口
//(1.1)新建主分割窗口QSplitter类对象:水平布局的分割窗口
QSplitter *splitterMain = new QSplitter(Qt::Horizontal,0); //水平布局,0表示主窗口
//(1.2)新建文本编辑框QTextEdit类对象,将其插入主分割窗口中
QTextEdit *textLeft = new QTextEdit(QObject::tr("Left Widget"),splitterMain); //插入主分割窗口中
textLeft->setAlignment(Qt::AlignCenter); //文本编辑框TextEdit中文字的对齐方式为【文字居中】
//2.右分割窗口
//(2.1)新建右分割窗口QSplitter类对象:垂直布局的分割窗口
QSplitter *splitterRight = new QSplitter(Qt::Vertical,splitterMain); //垂直布局,并以splitterMain主分割窗口为父窗口
splitterRight->setOpaqueResize(false); //setOpaqueResize():设定分割窗口的分隔条是否为实时更新显示。true为实时更新显示,false为拖拽时显示灰色粗线条
//(2.2)新建文本编辑框QTextEdit类对象,将其插入右分割窗口中
QTextEdit *textUp = new QTextEdit(QObject::tr("Top Widget"),splitterRight); //插入右分割窗口中
textUp->setAlignment(Qt::AlignCenter); //文本编辑框TextEdit中文字的对齐方式为【文字居中】
//(2.3)新建文本编辑框QTextEdit类对象,将其插入右分割窗口中
QTextEdit *textBottom = new QTextEdit(QObject::tr("Bottom Widget"),splitterRight); //插入右分割窗口中
textBottom->setAlignment(Qt::AlignCenter);//文本编辑框TextEdit中文字的对齐方式为【文字居中】
splitterMain->setStretchFactor(1,1);//第一个参数表示插入时控件序号为1的控件(即第2个控件),第二个参数大于0表示该控件可伸缩
splitterMain->setWindowTitle(QObject::tr("Splitter"));//设置窗口标题
splitterMain->show();//显示窗口
// MainWindow w;
// w.show();
return a.exec();//main()函数将控制权交给Qt,Qt完成事件处理工作,当应用程序退出的时候,exec()函数的值就会返回。
//exec()函数中,Qt接收并处理用户和系统的事件,并且将他们传递给适当的窗口部件。
}
2. 停靠窗口 QDockWidget类
新建:Qt Widgets Application
项目名称:DockWindows
类名:DockWindows
基类:QMainWindow
不选择“创建界面”复选框
涉及函数/方法: setFeatures()设置窗体特性:Movable可移动、Closable可关闭、Floatable可浮动
【dockwindows.cpp】源码如下:
#include "dockwindows.h"
#include <QTextEdit>
#include <QDockWidget> //停靠控件
DockWindows::DockWindows(QWidget *parent)
: QMainWindow(parent)
{
setWindowTitle(tr("DockWindows")); //设置主窗口标题栏
QTextEdit *te = new QTextEdit(this);//新建文本编辑框QTextEdit类对象
te->setText(tr("MainWindow")); //设置文本内容
te->setAlignment(Qt::AlignCenter); //文本编辑框TextEdit中文字的对齐方式为【文字居中】
setCentralWidget(te); //将此编辑框设为主窗口的中央窗体
//停靠窗口1:可移动
QDockWidget *dock = new QDockWidget(tr("DockWindow1"),this);//新建QDockWidget类对象
dock->setFeatures(QDockWidget::DockWidgetMovable); //窗体特性:Movable可移动、Closable可关闭、Floatable可浮动
dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);//窗体可停靠区域:左侧停靠、右侧停靠
QTextEdit *te1 = new QTextEdit(this);//新建文本编辑框QTextEdit类对象
te1->setText(tr("Window1, The dock widget can be moved between docks by the user" "")); //设置文本内容
dock->setWidget(te1);
addDockWidget(Qt::RightDockWidgetArea,dock);//窗体可停靠区域:右侧停靠
//停靠窗口2:可关闭、可浮动
dock = new QDockWidget(tr("DockWindow2"),this); //新建QDockWidget类对象
dock->setFeatures(QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetFloatable);//窗体特性:Movable可移动、Closable可关闭、Floatable可浮动
dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); //窗体可停靠区域:左侧停靠、右侧停靠
QTextEdit *te2 = new QTextEdit(this);//新建文本编辑框QTextEdit类对象
te2->setText(tr("Window2, The dock widget can be detached from the main window,"" and floated as an independent window, and can be closed")); //设置文本内容
dock->setWidget(te2);
addDockWidget(Qt::RightDockWidgetArea,dock);//窗体可停靠区域:右侧停靠
//停靠窗口3:可移动、可关闭、可浮动
dock = new QDockWidget(tr("DockWindow3"),this); //新建QDockWidget类对象
dock->setFeatures(QDockWidget::AllDockWidgetFeatures);//窗体全部特性:Movable可移动、Closable可关闭、Floatable可浮动
QTextEdit *te3 = new QTextEdit(this); //新建文本编辑框QTextEdit类对象
te3->setText(tr("Window3, The dock widget can be closed, moved and floated")); //设置文本内容
dock->setWidget(te3);
addDockWidget(Qt::RightDockWidgetArea,dock); //窗体可停靠区域:右侧停靠
}
DockWindows::~DockWindows()
{
}
如下图所示,窗口1和窗口3可移动。
3. 堆栈窗口 QStackedWidget类
新建:Qt Widgets Application
项目名称:StackedWidget
类名:StackDlg
基类:QDialog
不选择“创建界面”复选框
实现功能:选择左侧列表框中不同的选项时,右侧显示不同的窗体。窗体边距20。
【stackdlg.cpp】源码如下:
#include "stackdlg.h"
#include <QHBoxLayout> //添加头文件
StackDlg::StackDlg(QWidget *parent)
: QDialog(parent)
{
setWindowTitle(tr("StackedWidget"));
list=new QListWidget(this);//新建一个QListWidget控件类对象
//在新建的QListWidget控件中插入三个条目,作为选择项
list->insertItem(0,tr("Window1"));
list->insertItem(1,tr("Window2"));
list->insertItem(2,tr("Window3"));
//创建三个标签控件对象,作为堆栈窗口要显示的三层窗体。
label1 = new QLabel(tr("WindowTest1"));
label2 = new QLabel(tr("WindowTest22"));
label3 = new QLabel(tr("WindowTest333"));
stack = new QStackedWidget(this);//新建QStackedWidget堆栈窗口对象
//将创建的三个标签控件依次插入堆栈窗体
stack->addWidget(label1);
stack->addWidget(label2);
stack->addWidget(label3);
QHBoxLayout *mainLayout = new QHBoxLayout(this); //水平布局
mainLayout->setMargin(20); //设定对话框/窗体的边距
mainLayout->setSpacing(5); //设定各控件的间距
mainLayout->addWidget(list);
mainLayout->addWidget(stack,0,Qt::AlignCenter);//stacl添加的label文字居中
mainLayout->setStretchFactor(list,1); //第一个参数用于指定设置的控件(控件序号从0开始),第二个参数大于0表示此控件为可伸缩控件
mainLayout->setStretchFactor(stack,3); //设定可伸缩控件
connect(list,SIGNAL(currentRowChanged(int)),stack,SLOT(setCurrentIndex(int)));//按选择显示窗体。堆栈窗体index按插入顺序从0起依次排序,与QListWidget的条目排序一致
}
StackDlg::~StackDlg()
{
}