Widget opisany za pomocą qml nie widzi rodzica
-
#edit
Po stronie C++ ustawiłem rozciagani Widget'a.
Jakoś to wygląda, chociaż wolałbym kontrolować to QML'em.Cześć!
Po stronie C++ stworzyłem wrapper okienka.
CentralWidget jest opisany za pomocą QML, który niestety nie widzi swojego rodzica (null).
Rodzic jest mi potrzebny w celu pobrania jego szerokości i wysokości (chcę aby wypełniał całe okienko)Kod:
MainWindow::MainWindow( QUrl workspaceQmlSource ): m_engine(new QQmlEngine(this)), m_workspaceWidget(new QQuickWidget(m_engine, this)) { auto layout = new QVBoxLayout(); layout->setAlignment(Qt::AlignTop); layout->setSpacing(0); layout->setMargin(0); m_workspaceWidget->setSource(workspaceQmlSource); layout->addWidget(m_workspaceWidget); auto centralWidget = new QWidget(this); centralWidget->setObjectName("centralWidget"); centralWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); centralWidget->setLayout(layout); centralWidget->setContentsMargins(0, 0, 0, 0); setCentralWidget(centralWidget); }
Qml:
import QtQuick 2.7 import QtQuick.Window 2.3 Rectangle { id: workspace //anchors.fill: parent width: 300 height: Screen.height / 1.2 /*minimumWidth: Screen.width / 1.3 minimumHeight: Screen.height / 1.3*/ visible: true color: "red" Component.onCompleted: { console.log("parent: " + parent); } }
Output konsoli:
qml: parent: null
Są 2 widgety, gdyż pojawi się później jeszcze jeden równoległy do workspaceWidget widget opisujący titleBar.
Mógłbym wysłać do qml cały obiekt MainWindow i pobrać dane za pomocą Q_PROPERTY, jednak to rozwiązanie wydaje mi się dosyć słabe.
Jak to poprawić? -
Twój Rectangle jest root objektem w strukturze QMLa, więc nie ma rodzica - to normalne.
Albo użyj QMLa do całego swojego GUI, albo dodaj objekty, których potrzebujesz do
contextProperty
w silniku QML.