aboutsummaryrefslogtreecommitdiffstats
path: root/examples/quick/quickwidgets
diff options
context:
space:
mode:
Diffstat (limited to 'examples/quick/quickwidgets')
-rw-r--r--examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/CMakeLists.txt35
-rw-r--r--examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/doc/src/qquickwidgetversuswindow_opengl.qdoc1
-rw-r--r--examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/main.cpp2
-rw-r--r--examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/wobble.frag3
-rw-r--r--examples/quick/quickwidgets/quickwidget/CMakeLists.txt35
-rw-r--r--examples/quick/quickwidgets/quickwidget/doc/src/quickwidget.qdoc2
-rw-r--r--examples/quick/quickwidgets/quickwidget/main.cpp25
-rw-r--r--examples/quick/quickwidgets/quickwidget/rotatingsquare.qml2
8 files changed, 66 insertions, 39 deletions
diff --git a/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/CMakeLists.txt b/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/CMakeLists.txt
index 14813bc9ec..aa1cd2f0cc 100644
--- a/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/CMakeLists.txt
+++ b/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/CMakeLists.txt
@@ -1,18 +1,12 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(qquickwidgetversuswindow_opengl LANGUAGES CXX)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/quickwidgets/qquickwidgetversuswindow_opengl")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick QuickWidgets ShaderTools Widgets)
-qt_standard_project_setup()
+qt_standard_project_setup(REQUIRES 6.5)
qt_add_executable(qquickwidgetversuswindow_opengl
WIN32
@@ -24,11 +18,11 @@ qt_add_executable(qquickwidgetversuswindow_opengl
)
target_link_libraries(qquickwidgetversuswindow_opengl PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Quick
- Qt::QuickWidgets
- Qt::Widgets
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Quick
+ Qt6::QuickWidgets
+ Qt6::Widgets
)
qt_add_qml_module(qquickwidgetversuswindow_opengl
@@ -48,7 +42,16 @@ qt6_add_shaders(qquickwidgetversuswindow_opengl "shaders"
)
install(TARGETS qquickwidgetversuswindow_opengl
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET qquickwidgetversuswindow_opengl
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/doc/src/qquickwidgetversuswindow_opengl.qdoc b/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/doc/src/qquickwidgetversuswindow_opengl.qdoc
index 001d19f4e6..ced0eb2d34 100644
--- a/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/doc/src/qquickwidgetversuswindow_opengl.qdoc
+++ b/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/doc/src/qquickwidgetversuswindow_opengl.qdoc
@@ -5,6 +5,7 @@
\title QQuickWidget - QQuickView Comparison Example
\example quickwidgets/qquickwidgetversuswindow_opengl
\brief Demonstrates the benefits of QQuickWidget over a QQuickView embedded as a native window.
+ \examplecategory {User Interface Components}
\image qquickwidgetversuswindow-opengl-example.jpg
The example allows showing the same Qt Quick scene within the same
diff --git a/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/main.cpp b/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/main.cpp
index 8c95775577..8d8e4236b9 100644
--- a/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/main.cpp
+++ b/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/main.cpp
@@ -9,8 +9,6 @@
int main(int argc, char **argv)
{
- qputenv("QML_BAD_GUI_RENDER_LOOP", "1"); // QTBUG-39507
-
QApplication app(argc, argv);
// this example and QQuickWidget are only functional when rendering with OpenGL
diff --git a/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/wobble.frag b/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/wobble.frag
index 9fddf1a162..6aadad661f 100644
--- a/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/wobble.frag
+++ b/examples/quick/quickwidgets/qquickwidgetversuswindow_opengl/wobble.frag
@@ -1,3 +1,6 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
#version 440
layout(location = 0) in vec2 qt_TexCoord0;
diff --git a/examples/quick/quickwidgets/quickwidget/CMakeLists.txt b/examples/quick/quickwidgets/quickwidget/CMakeLists.txt
index ceb8b39da1..7a878a2b28 100644
--- a/examples/quick/quickwidgets/quickwidget/CMakeLists.txt
+++ b/examples/quick/quickwidgets/quickwidget/CMakeLists.txt
@@ -1,18 +1,12 @@
# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(quickwidget LANGUAGES CXX)
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/quick/quickwidgets/quickwidget")
-
find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick QuickWidgets Widgets)
-qt_standard_project_setup()
+qt_standard_project_setup(REQUIRES 6.5)
qt_add_executable(quickwidget
WIN32
@@ -21,11 +15,11 @@ qt_add_executable(quickwidget
)
target_link_libraries(quickwidget PRIVATE
- Qt::Core
- Qt::Gui
- Qt::Quick
- Qt::QuickWidgets
- Qt::Widgets
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Quick
+ Qt6::QuickWidgets
+ Qt6::Widgets
)
qt_add_qml_module(quickwidget
@@ -37,7 +31,16 @@ qt_add_qml_module(quickwidget
)
install(TARGETS quickwidget
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+)
+
+qt_generate_deploy_qml_app_script(
+ TARGET quickwidget
+ OUTPUT_SCRIPT deploy_script
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
+install(SCRIPT ${deploy_script})
diff --git a/examples/quick/quickwidgets/quickwidget/doc/src/quickwidget.qdoc b/examples/quick/quickwidgets/quickwidget/doc/src/quickwidget.qdoc
index 285acc5802..0a80b32c4a 100644
--- a/examples/quick/quickwidgets/quickwidget/doc/src/quickwidget.qdoc
+++ b/examples/quick/quickwidgets/quickwidget/doc/src/quickwidget.qdoc
@@ -5,6 +5,8 @@
\title Qt Quick Widgets Example
\example quickwidgets/quickwidget
\brief Demonstrates how to mix QML with a Qt Widgets application using the QQuickWidget class.
+ \examplecategory {User Interface Components}
+
\image qtquickwidgets-example.png
*/
diff --git a/examples/quick/quickwidgets/quickwidget/main.cpp b/examples/quick/quickwidgets/quickwidget/main.cpp
index ecac279a2f..f8e0b78844 100644
--- a/examples/quick/quickwidgets/quickwidget/main.cpp
+++ b/examples/quick/quickwidgets/quickwidget/main.cpp
@@ -63,14 +63,22 @@ MainWindow::MainWindow()
setCentralWidget(centralWidget);
QMenu *fileMenu = menuBar()->addMenu(tr("&File"));
- fileMenu->addAction(tr("Grab framebuffer"), this, &MainWindow::grabFramebuffer);
- fileMenu->addAction(tr("Render to pixmap"), this, &MainWindow::renderToPixmap);
- fileMenu->addAction(tr("Grab via grabToImage"), this, &MainWindow::grabToImage);
+ auto grabAction = fileMenu->addAction(tr("Grab framebuffer"), this, &MainWindow::grabFramebuffer);
+ auto renderAction = fileMenu->addAction(tr("Render to pixmap"), this, &MainWindow::renderToPixmap);
+ auto grabToImageAction = fileMenu->addAction(tr("Grab via grabToImage"), this, &MainWindow::grabToImage);
fileMenu->addAction(tr("Quit"), qApp, &QCoreApplication::quit);
QMenu *windowMenu = menuBar()->addMenu(tr("&Window"));
windowMenu->addAction(tr("Add tab widget"), this,
[this, centralWidget] { createQuickWidgetsInTabs(centralWidget); });
+
+ connect(m_quickWidget, &QObject::destroyed, this,
+ [this, grabAction, renderAction, grabToImageAction] {
+ m_quickWidget = nullptr;
+ grabAction->setEnabled(false);
+ renderAction->setEnabled(false);
+ grabToImageAction->setEnabled(false);
+ });
}
void MainWindow::createQuickWidgetsInTabs(QMdiArea *mdiArea)
@@ -104,10 +112,12 @@ void MainWindow::createQuickWidgetsInTabs(QMdiArea *mdiArea)
if (widget->parent()) {
widget->setAttribute(Qt::WA_DeleteOnClose, true);
widget->setParent(nullptr);
+ connect(this, &QObject::destroyed, widget, &QWidget::close);
widget->show();
btn->setText(msgFromTopLevel);
} else {
widget->setAttribute(Qt::WA_DeleteOnClose, false);
+ disconnect(this, &QObject::destroyed, widget, &QWidget::close);
tabWidget->addTab(widget, widget->windowTitle());
btn->setText(msgToTopLevel);
}
@@ -123,6 +133,7 @@ void MainWindow::quickWidgetStatusChanged(QQuickWidget::Status status)
{
if (status == QQuickWidget::Error) {
QStringList errors;
+ Q_ASSERT(m_quickWidget);
const auto widgetErrors = m_quickWidget->errors();
for (const QQmlError &error : widgetErrors)
errors.append(error.toString());
@@ -147,12 +158,14 @@ template<class T> void saveToFile(QWidget *parent, T *saveable)
void MainWindow::grabFramebuffer()
{
+ Q_ASSERT(m_quickWidget);
QImage image = m_quickWidget->grabFramebuffer();
saveToFile(this, &image);
}
void MainWindow::renderToPixmap()
{
+ Q_ASSERT(m_quickWidget);
QPixmap pixmap(m_quickWidget->size());
m_quickWidget->render(&pixmap);
saveToFile(this, &pixmap);
@@ -165,6 +178,7 @@ void MainWindow::grabToImage()
fd.setDefaultSuffix("png");
fd.selectFile("test_grabToImage.png");
if (fd.exec() == QDialog::Accepted) {
+ Q_ASSERT(m_quickWidget);
QMetaObject::invokeMethod(m_quickWidget->rootObject(), "performLayerBasedGrab",
Q_ARG(QVariant, fd.selectedFiles().first()));
}
@@ -189,8 +203,9 @@ int main(int argc, char **argv)
optMultipleSample = parser.isSet(multipleSampleOption);
- MainWindow mainWindow;
- mainWindow.show();
+ MainWindow *mainWindow = new MainWindow;
+ mainWindow->setAttribute(Qt::WA_DeleteOnClose, true);
+ mainWindow->show();
return app.exec();
}
diff --git a/examples/quick/quickwidgets/quickwidget/rotatingsquare.qml b/examples/quick/quickwidgets/quickwidget/rotatingsquare.qml
index 355c02f0cd..7fdc1978ce 100644
--- a/examples/quick/quickwidgets/quickwidget/rotatingsquare.qml
+++ b/examples/quick/quickwidgets/quickwidget/rotatingsquare.qml
@@ -31,6 +31,8 @@ Rectangle {
text.api = "OpenGL on QRhi";
else if (api === GraphicsInfo.Direct3D11)
text.api = "D3D11 on QRhi";
+ else if (api === GraphicsInfo.Direct3D12)
+ text.api = "D3D12 on QRhi";
else if (api === GraphicsInfo.Vulkan)
text.api = "Vulkan on QRhi";
else if (api === GraphicsInfo.Metal)