我有Qt Project(Windows,桌面)以及几个QMl文件。我的 main.cpp 看起来像这样(简化):
int main(int argc, char *argv[]) {
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QLatin1String("qrc:/QMLFiles/main.qml")));
return app.exec();
}
main.qml 是:
import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.0
import QtQuick.Window 2.0
ApplicationWindow {
id: mainWindow
objectName: "mainWindow"
visibility: "Maximized"
title: "Title goes here"
}
我还想要在应用程序窗口中显示一些qml文件( window.qml )。它们的行为类似于窗口(可拖动,可调整大小......)。
import QtQuick 2.7
import QtQuick.Window 2.0
//Removed MouseAreas and children
Rectangle {
id: rect
objectName: "rect"
width: 400
height: 400
x: 100
y: 100
border.width: 2
border.color: "black"
}
我当然可以使用
在 main.qml 文件中调用它们 import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.0
import QtQuick.Window 2.0
ApplicationWindow {
id: mainWindow
objectName: "mainWindow"
visibility: "Maximized"
title: "Title goes here"
//New:
Window {}
}
但我不希望他们从一开始就在那里。我想在C ++中使用HandlerObject(或其他东西)来管理由window.qml文件生成的Windows列表,并且可以使用函数打开和关闭它们。这可能吗?
干杯
答案 0 :(得分:0)
假设您希望每个窗口都有一个C ++数据集,我的建议是实现一个提供此数据的QAbstractListModel
派生类,模型的每个“行”都有一个Window的数据。
class WindowModel : public QAbstractListModel
{
Q_OBJECT
// ....
};
将该模型的实例暴露给QML
WindowModel windowModel;
QQmlApplicationEngine engine;
engine.rootContext()->setContextProperty("_windowModel", &windowModel);
engine.load(QUrl(QLatin1String("qrc:/QMLFiles/main.qml")));
在QML方面,您使用Repeater
,其中Window
为delegate
,C ++提供的模型为model
。
Repeater {
model: _windowModel
delegate: Window {
// access data provided by the model
}
}