意见箱
恒创运营部门将仔细参阅您的意见和建议,必要时将通过预留邮箱与您保持联络。感谢您的支持!
意见/建议
提交建议

Qt动态布局

来源:恒创科技 编辑:恒创科技编辑部
2024-01-28 19:46:59


一、效果展示

Qt动态布局_i++


动态布局无非就是打破原先的布局,然后再重新进行布局


Qt动态布局

清空布局

void MainWindow ::deleteAllitemsOfLayout(QLayout* layout)
{
QLayoutItem *child;
while ((child = layout->takeAt(0)) != nullptr)
{
///setParent为NULL,防止删除之后界面不消失
if(child->widget())
{
child->widget()->setParent(nullptr);
}
else if(child->layout())
{
deleteAllitemsOfLayout(child->layout());
}
delete child;
}
}

二、源码
#ifndef
#define

#include <QMainWindow>
#include <QDebug>
#include <QWidget>
#include <QLabel>
#include <QComboBox>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QGridLayout>
#include <QLayout>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();

void layout_1();
void layout_2();
void layout_3();
void layout_4();
void layout_5();
void deleteAllitemsOfLayout(QLayout* layout);

QWidget* L;
QWidget* C;
QComboBox* comboBox;
QVector<QLabel* > vec_label;
QVBoxLayout* mainLayout;
QHBoxLayout* layout_L;

public slots:
void slot_currentIndexChanged(int);

private:
Ui::MainWindow *ui;
};
#endif// MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->setFixedSize(1080,720);
L = new QWidget;
L->setFixedSize(1080,600);
C = new QWidget;
C->setFixedSize(1080,120);
mainLayout = new QVBoxLayout;
mainLayout->addWidget(L);
mainLayout->addWidget(C);
mainLayout->setMargin(0);
mainLayout->setSpacing(0);
this->centralWidget()->setLayout(mainLayout);

for(int i=0; i<9; i++)
{
vec_label.push_back(new QLabel(QString("通道 %1").arg(i+1)));
vec_label[i]->setStyleSheet("background-color: rgb(66,66,66); color: rgb(221,221,221); font-size: 30px; text-align: center;");
}

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(currentIndexChanged(int)),this,SLOT(slot_currentIndexChanged(int)));
}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::slot_currentIndexChanged(int n)
{
switch(n)
{
case 0:
{
layout_1();
break;
}
case 1:
{
layout_2();
break;
}
case 2:
{
layout_3();
break;
}
case 3:
{
layout_4();
break;
}
case 4:
{
layout_5();
break;
}

}
}

void MainWindow::layout_1()
{
deleteAllitemsOfLayout(layout_L);

QGridLayout * gridLayout = new QGridLayout;
gridLayout->addWidget(vec_label[0],0,0);
layout_L->addLayout(gridLayout);
}
void MainWindow::layout_2()
{
deleteAllitemsOfLayout(layout_L);

QGridLayout * gridLayout = new QGridLayout;
gridLayout->addWidget(vec_label[0],0,0);
gridLayout->addWidget(vec_label[1],0,1);
layout_L->addLayout(gridLayout);
}
void MainWindow::layout_3()
{
deleteAllitemsOfLayout(layout_L);

QGridLayout * gridLayout = new QGridLayout;
gridLayout->addWidget(vec_label[0],0,0);
gridLayout->addWidget(vec_label[1],0,1);
gridLayout->addWidget(vec_label[2],1,0);
gridLayout->addWidget(vec_label[3],1,1);
layout_L->addLayout(gridLayout);
}
void MainWindow::layout_4()
{
deleteAllitemsOfLayout(layout_L);

QGridLayout * gridLayout = new QGridLayout;
gridLayout->addWidget(vec_label[0],0,0,2,2);
gridLayout->addWidget(vec_label[1],0,2);
gridLayout->addWidget(vec_label[2],1,2);
gridLayout->addWidget(vec_label[3],2,0);
gridLayout->addWidget(vec_label[4],2,1);
gridLayout->addWidget(vec_label[5],2,2);
layout_L->addLayout(gridLayout);
}
void MainWindow::layout_5()
{
deleteAllitemsOfLayout(layout_L);

QGridLayout * gridLayout = new QGridLayout;
gridLayout->addWidget(vec_label[0],0,0);
gridLayout->addWidget(vec_label[1],0,1);
gridLayout->addWidget(vec_label[2],0,2);
gridLayout->addWidget(vec_label[3],1,0);
gridLayout->addWidget(vec_label[4],1,1);
gridLayout->addWidget(vec_label[5],1,2);
gridLayout->addWidget(vec_label[6],2,0);
gridLayout->addWidget(vec_label[7],2,1);
gridLayout->addWidget(vec_label[8],2,2);
layout_L->addLayout(gridLayout);
}
void MainWindow::deleteAllitemsOfLayout(QLayout* layout)
{
QLayoutItem *child;
while ((child = layout->takeAt(0)) != nullptr)
{
///setParent为NULL,防止删除之后界面不消失
if(child->widget())
{
child->widget()->setParent(nullptr);
}
else if(child->layout())
{
deleteAllitemsOfLayout(child->layout());
}
delete child;
}
}


上一篇: Qt Creator使用技巧+Qt工程文件pro详解 下一篇: 手机怎么远程登录云服务器?