引言
之前写了一个手动切换多个布局的程序,下面来记录一下。
程序运行效果如下:
示例
需求
通过点击程序界面上不同的布局按钮,使主工作区呈现出不同的页面布局,多个布局之间可以通过点击不同布局按钮切换。支持的最多的窗口为9个。不同布局下窗口数随之变化。
开发环境
使用的QtCreator12.0.2,基于Qt5.15.2库开发。
代码实现
创建基于QApplication的应用程序。
下面是实现代码:
main.cpp
#include "manullayoutdialog.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
ManulLayoutDialog w;
w.show();
ObjectPooling*m_pool = ObjectPooling::getInstance(9);
return a.exec();
}
ObjectPooling.h
#ifndef OBJECTPOOLING_H
#define OBJECTPOOLING_H
#include <QObject>
#include <QWidget>
#include <QVector>
class ObjectPooling:public QObject
{
Q_OBJECT
private:
ObjectPooling(qint32 num);
ObjectPooling(const ObjectPooling &) = delete;
ObjectPooling& operator=(const ObjectPooling&)=delete;
public:
static ObjectPooling *getInstance(qint32 num);
~ObjectPooling();
QWidget* takeOut();
void putIn(QWidget *pWidget);
int getSize()const;
private:
QVector<QWidget*> m_vecWidget;
};
#endif // OBJECTPOOLING_H
ObjectPooling.cpp
#include "objectpooling.h"
#include <qDebug>
ObjectPooling::ObjectPooling(qint32 num):QObject() {
for(int i = 0; i < num;++i){
QWidget *pWidget = new QWidget;
if(pWidget){
pWidget->setStyleSheet("background-color:back;");
m_vecWidget.push_back(pWidget);
}
}
}
ObjectPooling *ObjectPooling::getInstance(qint32 num)
{
static ObjectPooling instance(num);
return &instance;
}
ObjectPooling::~ObjectPooling()
{
if(m_vecWidget.size(