Qt布局管理(分割/停靠/堆栈窗口)

20201017目录

布局管理(分割窗口 / 停靠窗口 / 堆栈窗口)

1. 分割窗口 QSplitter类

2. 停靠窗口 QDockWidget类

3. 堆栈窗口 QStackedWidget类


布局管理(分割窗口 / 停靠窗口 / 堆栈窗口)

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()
{

}

 

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卢奕冰2017

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值