动态生成界面元素
- 根据JSON数据中的信息,在运行时动态生成QTabWidget中的选项卡和按钮。
- 使用循环遍历JSON数组和对象,创建相应的Qt部件。
流程步骤
- 构造数据结构和初始界面
- 构造 JSON 数据字符串
- 创建 TabWidgetGenerator 对象,传入 JSON 数据字符串
- 解析 JSON 数据,获取窗口结构信息
- 创建 QTabWidget
- 遍历工具栏组件
- 对于每个组件:
- 创建新的 QWidget 代表一个选项卡
- 设置选项卡的对象名称
- 获取当前选项卡的布局信息
- 根据布局类型创建相应的 QLayout
- 获取当前选项卡的按钮信息
- 根据布局类型创建按钮,添加到选项卡的布局中
- 将创建的布局设置为当前选项卡的布局
- 将选项卡添加到 QTabWidget 中,设置显示名称
- 为窗口创建主布局
- 将 QTabWidget 添加到垂直布局中
- 将垂直布局设置为窗口的主布局
- 显示窗口
- 代码
#include <QApplication>
#include <QWidget>
#include <QTabWidget>
#include <QPushButton>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
class TabWidgetGenerator : public QWidget {
public:
TabWidgetGenerator(const QString& jsonString, QWidget* parent = nullptr)
: QWidget(parent) {
QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonString.toUtf8());
QJsonObject jsonRoot = jsonDoc.object();
QTabWidget* tabWidget = new QTabWidget(this);
QJsonArray toolbarComponents = jsonRoot["A"].toObject()["components"].toArray();
for (const QJsonValue& tabNameValue : toolbarComponents) {
QString tabName = tabNameValue.toString();
QWidget* tab = new QWidget(tabWidget);
tab->setObjectName(tabName);
QJsonObject tabComponents = jsonRoot[tabName].toObject();
QJsonArray buttonArray = tabComponents["components"].toArray();
QLayout* tabLayout = createLayout(tabComponents["layout"].toString());
for (const QJsonValue& buttonValue : buttonArray) {
QString buttonName = buttonValue.toString();
QPushButton* button = new QPushButton(buttonName, tab);
tabLayout->addWidget(button);
}
tab->setLayout(tabLayout);
tabWidget->addTab(tab, tabComponents["showName"].toString());
}
QVBoxLayout* mainLayout = new QVBoxLayout(this);
mainLayout->addWidget(tabWidget);
setLayout(mainLayout);
}
private:
QLayout* createLayout(const QString& layoutType) {
if (layoutType == "H") {
return new QHBoxLayout;
}
else if (layoutType == "V") {
return new QVBoxLayout;
}
return nullptr;
}
};
int main(int argc, char* argv[]) {
QApplication a(argc, argv);
QString jsonData = R"(
{
"A" : {
"components":["B","C","D"],
"layout":"H"
},
"B":{
"components":["btn1","btn2","btn3"],
"showName":"B",
"layout":"H"
},
"C":{
"components":["btn4","btn5","btn6"],
"showName":"C",
"layout":"H"
},
"D":{
"components":["btn7","btn8","btn9"],
"showName":"D",
"layout":"H"
}
}
)";
TabWidgetGenerator widget(jsonData);
widget.show();
return a.exec();
}
生成结果
