Qt Quick示例 - 集成在_widget中
演示如何通过QWidget::createWindowContainer()将QQuickWindow嵌入QWidget UI中。
此示例演示了将Qt Quick内容添加到基于QWidget的应用程序的一种方法。QQuickView及其父类QQuickWindow都从QWindow派生。这意味着它们可以使用QWidget::createWindowContainer(),就像其他QWindow一样。
运行示例
要从Qt Creator运行此示例,请打开欢迎模式并从示例中选择示例。有关更多信息,请访问构建和运行示例。
将窗口内部嵌入会导致在控件层次结构中创建本地子控件,并将窗口(示例中的QQuickView)重新作为父控件。容器控件负责重新定位子窗口,使其看起来是用户界面的一部分,尽管在现实中,它是一个独立的本地窗口,独立于其父级,QWidget基于顶级窗口。
MainWindow::MainWindow() : m_quickView(new QQuickView) { QWidget *centralWidget = new QWidget(this); QVBoxLayout *layout = new QVBoxLayout(centralWidget); m_quickView->setResizeMode(QQuickView::SizeRootObjectToView); connect(m_quickView, &QQuickView::statusChanged, this, &MainWindow::quickViewStatusChanged); connect(m_quickView, &QQuickWindow::sceneGraphError, this, &MainWindow::sceneGraphError); m_quickView->loadFromModule("embeddedinwidgets", "Main"); QWidget *container = QWidget::createWindowContainer(m_quickView); container->setMinimumSize(m_quickView->size()); container->setFocusPolicy(Qt::TabFocus); layout->addWidget(new QLineEdit(QStringLiteral("A QLineEdit"))); layout->addWidget(container); layout->addWidget(new QLineEdit(QStringLiteral("A QLineEdit"))); setCentralWidget(centralWidget); QMenu *fileMenu = menuBar()->addMenu(tr("File")); fileMenu->addAction(tr("Quit"), qApp, &QCoreApplication::quit); }
初始化过程中的关键步骤是创建容器
,这是一个包含和托管QQuickView的QWidget。这个控件可以像任何其他QWidget一样添加到布局中。
注意:使用本地窗口嵌入仅是将QWidget和Qt Quick用户界面结合的一种可能方法。其他更常用的方法是QQuickWidget。请参阅Qt Quick Widgets示例了解使用QQuickWidget的示例。在渲染和事件处理方面,内部实现有显著差异。QQuickWidget根本不使用本地窗口,并将Qt Quick渲染重定向到一个纹理,然后通过3D图形API(如OpenGL或Vulkan)将其复合到QWidget内容的其余部分。这提供了更多灵活性,但代价是性能。它还适用于没有实际窗口系统和本地窗口概念的平台。而本示例展示的窗口嵌入方法可能性能更好,但最适合用户界面,其中Qt Quick内容占据一个固定的矩形区域,并且在之后不进行缩放、堆叠或裁剪。
© 2024 The Qt Company Ltd. 本文档中的内容贡献版权归各自所有者所有。提供的文档根据自由软件基金会发布的GNU自由文档许可协议版本1.3 许可。Qt及其相关标志是芬兰及其它国家/地区The Qt Company Ltd. 的商标。所有其他商标均属于各自所有者。