From c77ab1212bd9a356ddeb03af6bb17c0bdf8ed955 Mon Sep 17 00:00:00 2001 From: Yuhang Zhao <zhaoyuhang@rankyee.com> Date: 周一, 11 12月 2023 15:56:59 +0800 Subject: [PATCH] tweak quick API --- examples/qml/main.qml | 34 ++++++++++++++++ src/quick/quickwindowagent.h | 19 +++++---- examples/qml/main.cpp | 2 + src/quick/CMakeLists.txt | 1 src/quick/qwkquickglobal.h | 10 +++++ src/quick/qwkquickglobal.cpp | 22 +++++++++++ src/quick/quickwindowagent.cpp | 4 +- 7 files changed, 81 insertions(+), 11 deletions(-) diff --git a/examples/qml/main.cpp b/examples/qml/main.cpp index 4dbda50..1898550 100644 --- a/examples/qml/main.cpp +++ b/examples/qml/main.cpp @@ -1,3 +1,4 @@ +#include <QWKQuick/qwkquickglobal.h> #include <QGuiApplication> #include <QQmlApplicationEngine> @@ -13,6 +14,7 @@ QGuiApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough); QGuiApplication application(argc, argv); QQmlApplicationEngine engine; + QWK::registerTypes(&engine); engine.load(QUrl(QStringLiteral("qrc:///main.qml"))); return application.exec(); } \ No newline at end of file diff --git a/examples/qml/main.qml b/examples/qml/main.qml index b319421..7f5c228 100644 --- a/examples/qml/main.qml +++ b/examples/qml/main.qml @@ -1,9 +1,41 @@ import QtQuick 2.15 import QtQuick.Window 2.15 +import QtQuick.Controls 2.15 +import QWindowKit 1.0 Window { id: window - visible: true width: 640 height: 480 + color: "#f0f0f0" + title: qsTr("Hello, world!") + Component.onCompleted: { + windowAgent.setup(window) + window.visible = true + } + + WindowAgent { + id: windowAgent + } + + Rectangle { + id: titleBar + anchors { + top: parent.top + left: parent.left + right: parent.right + } + height: 32 + color: "white" + Component.onCompleted: windowAgent.setTitleBar(titleBar) + + Text { + anchors.centerIn: parent + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + text: window.title + font.pixelSize: 14 + color: window.active ? "black" : "gray" + } + } } \ No newline at end of file diff --git a/src/quick/CMakeLists.txt b/src/quick/CMakeLists.txt index 0591a42..1d61653 100644 --- a/src/quick/CMakeLists.txt +++ b/src/quick/CMakeLists.txt @@ -5,6 +5,7 @@ set(_src qwkquickglobal.h + qwkquickglobal.cpp quickitemdelegate_p.h quickitemdelegate.cpp quickwindowagent.h diff --git a/src/quick/quickwindowagent.cpp b/src/quick/quickwindowagent.cpp index 7fc72f5..9cee1b5 100644 --- a/src/quick/quickwindowagent.cpp +++ b/src/quick/quickwindowagent.cpp @@ -72,12 +72,12 @@ return d->context->isHitTestVisible(item); } - void QuickWindowAgent::setHitTestVisible(const QQuickItem *item, bool visible) { + void QuickWindowAgent::setHitTestVisible_item(const QQuickItem *item, bool visible) { Q_D(QuickWindowAgent); d->context->setHitTestVisible(item, visible); } - void QuickWindowAgent::setHitTestVisible(const QRect &rect, bool visible) { + void QuickWindowAgent::setHitTestVisible_rect(const QRect &rect, bool visible) { Q_D(QuickWindowAgent); d->context->setHitTestVisible(rect, visible); } diff --git a/src/quick/quickwindowagent.h b/src/quick/quickwindowagent.h index 714ffcf..e2460d4 100644 --- a/src/quick/quickwindowagent.h +++ b/src/quick/quickwindowagent.h @@ -19,17 +19,20 @@ ~QuickWindowAgent() override; public: - bool setup(QQuickWindow *window); + Q_INVOKABLE bool setup(QQuickWindow *window); - const QQuickItem *titleBar() const; - void setTitleBar(const QQuickItem *item); + Q_INVOKABLE const QQuickItem *titleBar() const; + Q_INVOKABLE void setTitleBar(const QQuickItem *item); - const QQuickItem *systemButton(SystemButton button) const; - void setSystemButton(SystemButton button, const QQuickItem *item); + Q_INVOKABLE const QQuickItem *systemButton(SystemButton button) const; + Q_INVOKABLE void setSystemButton(SystemButton button, const QQuickItem *item); - bool isHitTestVisible(const QQuickItem *item) const; - void setHitTestVisible(const QQuickItem *item, bool visible = true); - void setHitTestVisible(const QRect &rect, bool visible = true); + Q_INVOKABLE bool isHitTestVisible(const QQuickItem *item) const; + Q_INVOKABLE inline void setHitTestVisible(const QQuickItem *item, bool visible = true) { + setHitTestVisible_item(item, visible); + } + Q_INVOKABLE void setHitTestVisible_item(const QQuickItem *item, bool visible = true); + Q_INVOKABLE void setHitTestVisible_rect(const QRect &rect, bool visible = true); Q_SIGNALS: void titleBarWidgetChanged(const QQuickItem *item); diff --git a/src/quick/qwkquickglobal.cpp b/src/quick/qwkquickglobal.cpp new file mode 100644 index 0000000..834dd6d --- /dev/null +++ b/src/quick/qwkquickglobal.cpp @@ -0,0 +1,22 @@ +#include "qwkquickglobal.h" +#include "quickwindowagent.h" +#include <QtQml/QQmlEngine> + +namespace QWK { + + static constexpr const char kModuleUri[] = "QWindowKit"; + + void registerTypes(QQmlEngine *engine) { + Q_UNUSED(engine); + + static bool once = false; + if (once) { + return; + } + once = true; + + qmlRegisterType<QuickWindowAgent>(kModuleUri, 1, 0, "WindowAgent"); + qmlRegisterModule(kModuleUri, 1, 0); + } + +} diff --git a/src/quick/qwkquickglobal.h b/src/quick/qwkquickglobal.h index a5c613e..cfec206 100644 --- a/src/quick/qwkquickglobal.h +++ b/src/quick/qwkquickglobal.h @@ -15,4 +15,14 @@ # endif #endif +QT_BEGIN_NAMESPACE +class QQmlEngine; +QT_END_NAMESPACE + +namespace QWK { + + QWK_QUICK_EXPORT void registerTypes(QQmlEngine *engine); + +} + #endif // QWKQUICKGLOBAL_H -- Gitblit v1.9.1