qtquick: Allow to add the guest widget declaratively

This is an alternative to setting source
This commit is contained in:
Sergio Martins
2021-04-05 16:22:56 +01:00
parent 15d4f77d5d
commit ead9e8945e
3 changed files with 23 additions and 8 deletions

View File

@@ -33,6 +33,15 @@ KDDW.MainWindowLayout {
source: ":/Another.qml"
}
KDDW.DockWidget {
id: dock5
uniqueName: "dock5"
Rectangle {
id: guest
color: "pink"
}
}
Button {
text: "Toggle Another"
anchors {
@@ -43,10 +52,10 @@ KDDW.MainWindowLayout {
z: 10
onClicked: {
if (dock4.dockWidget.visible) {
dock4.dockWidget.close();
if (dock5.dockWidget.visible) {
dock5.dockWidget.close();
} else {
dock4.dockWidget.show();
dock5.dockWidget.show();
}
}
}

View File

@@ -63,14 +63,21 @@ void DockWidgetInstantiator::componentComplete()
qWarning() << Q_FUNC_INFO << "Unexpected bug.";
return;
}
if (m_sourceFilename.isEmpty()) {
qWarning() << Q_FUNC_INFO << "the 'source' property must be set.";
const auto childItems = this->childItems();
if (m_sourceFilename.isEmpty() && childItems.size() != 1) {
qWarning() << Q_FUNC_INFO << "Either 'source' property must be set or add exactly one child"
<< "; source=" << m_sourceFilename << "; num children=" << childItems.size();
return;
}
m_dockWidget = new DockWidgetQuick(m_uniqueName);
m_dockWidget->setWidget(m_sourceFilename);
if (m_sourceFilename.isEmpty()) {
m_dockWidget->setWidget(childItems.constFirst());
} else {
m_dockWidget->setWidget(m_sourceFilename);
}
Q_EMIT dockWidgetChanged();
}

View File

@@ -34,7 +34,6 @@ class DockWidgetQuick;
class DockWidgetInstantiator : public QQuickItem
{
Q_OBJECT
Q_INTERFACES(QQmlParserStatus)
Q_PROPERTY(QString uniqueName READ uniqueName WRITE setUniqueName NOTIFY uniqueNameChanged)
Q_PROPERTY(QString source READ source WRITE setSource NOTIFY sourceChanged)
Q_PROPERTY(KDDockWidgets::DockWidgetQuick *dockWidget READ dockWidget NOTIFY dockWidgetChanged)