1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtGui>
#include <QtWidgets>
#include <QQmlEngine>
#include <QQuickView>
#include <QQmlContext>
class TestWindow : public QRasterWindow
{
public:
using QRasterWindow::QRasterWindow;
TestWindow(const QBrush &brush) : m_brush(brush) {}
protected:
void mousePressEvent(QMouseEvent *) override
{
m_pressed = true;
update();
}
void mouseReleaseEvent(QMouseEvent *) override
{
m_pressed = false;
update();
}
void paintEvent(QPaintEvent *event) override
{
QPainter painter(this);
painter.setCompositionMode(QPainter::CompositionMode_Source);
painter.fillRect(event->rect(), m_pressed ? QGradient(QGradient::JuicyPeach) : m_brush);
}
private:
QBrush m_brush = QGradient(QGradient::DustyGrass);
bool m_pressed = false;
};
#ifdef Q_OS_APPLE
#include <WebKit/WebKit.h>
#include <MapKit/MapKit.h>
#include <AVKit/AVKit.h>
#endif
int main(int argc, char* argv[])
{
QApplication app(argc,argv);
app.setOrganizationName("QtProject");
app.setOrganizationDomain("qt-project.org");
app.setApplicationName(QFileInfo(app.applicationFilePath()).baseName());
QQuickView view;
view.connect(view.engine(), &QQmlEngine::quit, &app, &QCoreApplication::quit);
#ifdef Q_OS_MACOS
view.engine()->addImportPath(app.applicationDirPath() + QStringLiteral("/../PlugIns"));
#endif
TestWindow testWindow;
QWindow *mapWindow = nullptr;
QWindow *webViewWindow = nullptr;
QWindow *videoWindow = nullptr;
#ifdef Q_OS_APPLE
auto *webView = [WKWebView new];
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"https://www.qt.io"]]];
webViewWindow = QWindow::fromWinId(WId(webView));
auto *mapView = [MKMapView new];
mapWindow = QWindow::fromWinId(WId(mapView));
# ifndef Q_OS_IOS
auto *videoView = [AVPlayerView new];
videoView.player = [AVPlayer playerWithURL:[NSURL URLWithString:
@"https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4"]];
videoWindow = QWindow::fromWinId(WId(videoView));
# endif
#else
mapWindow = &testWindow;
webViewWindow = &testWindow;
videoWindow = &testWindow;
#endif
auto *calendarWidget = new QCalendarWidget;
calendarWidget->setAttribute(Qt::WA_NativeWindow);
QWindow *widgetWindow = calendarWidget->windowHandle();
auto *context = view.engine()->rootContext();
context->setContextProperty("testWindow", &testWindow);
context->setContextProperty("widgetWindow", widgetWindow);
context->setContextProperty("mapWindow", mapWindow);
context->setContextProperty("webViewWindow", webViewWindow);
context->setContextProperty("videoWindow", videoWindow);
#if defined(QT_MULTIMEDIA_LIB)
context->setContextProperty("haveQtMultimedia", true);
#endif
view.setSource(QUrl("qrc:/qt/qml/windowembeddingexample/windowembedding.qml"));
if (view.status() == QQuickView::Error)
return -1;
view.setResizeMode(QQuickView::SizeRootObjectToView);
view.show();
return app.exec();
}
|