是否可以在单独的 ui 文件中指定 Stacked Widget 的每一页
Is it possible to have each page of a Stacked Widget specified in a separate ui file
我在 Qt Creator v4.14.2 中使用 Stacked Widget。现在每个页面的所有项目都驻留在 mainwindow.ui 文件中。我在页面之间切换没有问题。
出于清楚和文件大小的原因,我想将每个 Stacked Widget 页面的项目放在单独的 ui 文件中。我知道这种需求没有技术上的原因。我已经使用 MVVM 开发了 UI,如果可能的话,我想在 Qt 中复制该方法(使用 Qt Creator)。
对于我正在进行的这个项目,我不想在 C++ 代码中创建页面 and/or 小部件。
您可以使用 QUiLoader
加载任意数量的 UI 文件。假设文件被命名为 page-1.ui
, ... page-10.ui
你可以有类似 (untested)...
#include <QStackedWidget>
#include <QUiLoader>
#include <QWidget>
.
.
.
QStackedWidget stack;
QUiLoader loader;
for (int page_no = 1; page_no <= 10; ++page_no) {
QFile f(QString("page-%1.ui").arg(page_no));
if (f.open(QFile::ReadOnly)) {
auto *w = loader.load(&f);
stack.addWidget(w);
} else {
qWarning() << "failed to load UI file.";
}
}
我在 Qt Creator v4.14.2 中使用 Stacked Widget。现在每个页面的所有项目都驻留在 mainwindow.ui 文件中。我在页面之间切换没有问题。
出于清楚和文件大小的原因,我想将每个 Stacked Widget 页面的项目放在单独的 ui 文件中。我知道这种需求没有技术上的原因。我已经使用 MVVM 开发了 UI,如果可能的话,我想在 Qt 中复制该方法(使用 Qt Creator)。
对于我正在进行的这个项目,我不想在 C++ 代码中创建页面 and/or 小部件。
您可以使用 QUiLoader
加载任意数量的 UI 文件。假设文件被命名为 page-1.ui
, ... page-10.ui
你可以有类似 (untested)...
#include <QStackedWidget>
#include <QUiLoader>
#include <QWidget>
.
.
.
QStackedWidget stack;
QUiLoader loader;
for (int page_no = 1; page_no <= 10; ++page_no) {
QFile f(QString("page-%1.ui").arg(page_no));
if (f.open(QFile::ReadOnly)) {
auto *w = loader.load(&f);
stack.addWidget(w);
} else {
qWarning() << "failed to load UI file.";
}
}