You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qt中如何将现有QML UI嵌入到Widget容器中

操作步骤
  • 第一步:先检查项目配置文件(.pro),确保已经引入QML相关依赖,添加如下配置:
QT += quick widgets

如果后续使用更便捷的QQuickWidget方案,还可以额外添加quickwidgets模块。

  • 第二步:调整mainwindow.cpp中的初始化逻辑,增加QML自适应容器尺寸的配置,再将封装好的QML Widget添加到目标容器中:
    如果你要把QML放到界面上提前拖好的占位Widget(假设该Widget的objectName为qmlContainer,也就是你截图中要放置QML的区域),修改后的构造函数代码如下:
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent):
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    view = new QQuickView(QUrl(QLatin1String("qrc:/wave.qml")));
    // 配置QML根元素跟随容器尺寸自动缩放
    view->setResizeMode(QQuickView::SizeRootObjectToView);
    qmlWidgt = QWidget::createWindowContainer(view);
    
    // 如果你要替换整个主窗口的中心部件,就打开下面的注释
    // setCentralWidget(qmlWidgt);
    
    // 如果你要放到指定的Widget容器里,用下面的代码,给目标容器加布局,放入qmlWidgt
    QVBoxLayout *layout = new QVBoxLayout(ui->qmlContainer);
    layout->setContentsMargins(0,0,0,0); // 去掉边距,让QML填满容器
    layout->addWidget(qmlWidgt);
}
  • 第三步:运行验证,确保你的qrc资源文件中已经正确添加了wave.qml,路径和代码中写的完全一致即可。

可选优化方案:如果你不想手动处理QWindow转QWidget的逻辑,也可以直接用QQuickWidget实现,代码更简洁,不需要额外处理容器转换:

// 头文件中把QQuickView和QWidget的声明替换为QQuickWidget *qmlWidget;
// 构造函数中直接写:
qmlWidget = new QQuickWidget(QUrl("qrc:/wave.qml"), this);
qmlWidget->setResizeMode(QQuickWidget::SizeRootObjectToView);
QVBoxLayout *layout = new QVBoxLayout(ui->qmlContainer);
layout->setContentsMargins(0,0,0,0);
layout->addWidget(qmlWidget);

内容的提问来源于stack exchange,提问作者amirmat98

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 02:27:03