qt动态布局详解,qt 动态布局
一、效果展示
动态布局无非就是打破原先的布局,然后再重新进行布局
清空布局
void主窗口:deletelitemsoflayout(QLayout * layout)
{
QLayoutItem *子项目
while ((child=layout- takeAt(0))!=nullptr)
{
///setParent为空,防止删除之后界面不消失
如果(子部件())
{
child-widget()-set parent(nullptr);
}
else if(子布局())
{
deletelitemsoflayout(child-layout());
}
删除孩子;
}
}二、源码#ifndef
#定义
#包含主窗口
#包含调试器
#包含窗口
#包含图片
#包含QComboBox
#包含水平布局
#包含垂直布局
#包含栅格布局
#包括本布局
QT _ BEGIN _命名空间
命名空间Ui {类主窗口}
QT _ END名称空间
类主窗口:公共主窗口
{
q _对象
公共:
主窗口(q widget * parent=nullptr);
~主窗口();
void layout _ 1();
void layout _ 2();
void layout _ 3();
void layout _ 4();
void layout _ 5();
void deleteAllitemsOfLayout(QLayout * layout);
q widget * L;
q widget * C;
QComboBox *组合框
QVector QLabel * vec _ label
QVBoxLayout *主布局
qhbox布局* layout _ L;
公共插槽:
void slot _ current exchange(int);
私人:
ui:主窗口* ui
};
# endif//主窗口_ H # include 主窗口。 h
#include ui_mainwindow.h
主窗口:主窗口(q widget * parent)
:QMainWindow(父)
,用户界面(新Ui:主窗口)
{
ui- setupUi(这个);
this- setFixedSize(1080,720);
L=新的窗口
L- setFixedSize(1080,600);
C=新的QWidget
C- setFixedSize(1080,120);
mainLayout=新QVBoxLayout
主布局-添加小部件(L);
主布局-添加小部件(C);
主布局-设置边距(0);
主布局-设置间距(0);
this-centralWidget()-设置布局(主布局);
for(int I=0;I 9;我)
{
vec_label.push_back(新的QLabel(QString(通道%1).arg(I 1)));
vec _ label[I]-set样式表( background-color:RGB(66,66,66);颜色:rgb(221,221,221);字体大小:30px 文本对齐:居中;);
}
layout _ L=new QHBoxLayout(L);
layout _ 1();
comboBox=new QComboBox(C);
comboBox- setGeometry(870,30,200,30);
comboBox- addItem(布局1);
comboBox- addItem(布局2);
comboBox- addItem(布局3);
comboBox- addItem(布局4);
comboBox- addItem(布局5);
connect(comboBox,SIGNAL(current ind exchange(int)),this,SLOT(SLOT _ current ind exchange(int)));
}
主窗口:~主窗口()
{
删除ui;
}
void主窗口:slot _ current exchange(int n)
{
开关(名词)
{
案例0:
{
layout _ 1();
打破;
}
案例1:
{
layout _ 2();
打破;
}
案例二:
{
layout _ 3();
打破;
}
案例三:
{
layout _ 4();
打破;
}
案例4:
{
layout _ 5();
打破;
}
}
}
void MainWindow:layout_1()
{
deletelitemsoflayout(layout _ L);
QGridLayout * gridLayout=new QGridLayout;
gridLayout-add小部件(vec _ label[0],0,0);
layout _ L-添加布局(gridLayout);
}
void MainWindow:layout_2()
{
deletelitemsoflayout(layout _ L);
QGridLayout * gridLayout=new QGridLayout;
gridLayout-add小部件(vec _ label[0],0,0);
gridLayout-add小部件(vec _ label[1],0,1);
layout _ L-添加布局(gridLayout);
}
void MainWindow:layout_3()
{
deletelitemsoflayout(layout _ L);
QGridLayout * gridLayout=new QGridLayout;
gridLayout-add小部件(vec _ label[0],0,0);
gridLayout-add小部件(vec _ label[1],0,1);
gridLayout-add小部件(vec _ label[2],1,0);
gridLayout-add小部件(vec _ label[3],1,1);
layout _ L-添加布局(gridLayout);
}
void MainWindow:layout_4()
{
deletelitemsoflayout(layout _ L);
QGridLayout * gridLayout=new QGridLayout;
gridLayout-add小部件(vec _ label[0],0,0,2,2);
gridLayout-add小部件(vec _ label[1],0,2);
gridLayout-add小部件(vec _ label[2],1,2);
gridLayout-add小部件(vec _ label[3],2,0);
gridLayout-add小部件(vec _ label[4],2,1);
gridLayout-add小部件(vec _ label[5],2,2);
layout _ L-添加布局(gridLayout);
}
void MainWindow:layout_5()
{
deletelitemsoflayout(layout _ L);
QGridLayout * gridLayout=new QGridLayout;
gridLayout-add小部件(vec _ label[0],0,0);
gridLayout-add小部件(vec _ label[1],0,1);
gridLayout-add小部件(vec _ label[2],0,2);
gridLayout-add小部件(vec _ label[3],1,0);
gridLayout-add小部件(vec _ label[4],1,1);
gridLayout-add小部件(vec _ label[5],1,2);
gridLayout-add小部件(vec _ label[6],2,0);
gridLayout-add小部件(vec _ label[7],2,1);
gridLayout-add小部件(vec _ label[8],2,2);
layout _ L-添加布局(gridLayout);
}
void主窗口:deletelitemsoflayout(QLayout * layout)
{
QLayoutItem *子项目
while ((child=layout- takeAt(0))!=nullptr)
{
///setParent为空,防止删除之后界面不消失
如果(子部件())
{
child-widget()-set parent(nullptr);
}
else if(子布局())
{
deletelitemsoflayout(child-layout());
}
删除孩子;
}
}
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。