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

QML BusyIndicator如何实现类似Android ProgressDialog的窗口遮罩禁用效果

解决方案

问题原因:你当前使用的Popup默认未开启模态属性,仅会拦截自身100x100尺寸范围内的输入事件,其余区域的输入会透传到下层窗口,因此用户依然可以操作窗口内的控件。

仅需添加modal: true属性即可实现和MessageBox一致的模态锁定效果,修正后代码如下:

Popup {
    id: waitpop
    // 开启模态,拦截所有下层输入
    modal: true
    // 可选配置:模态遮罩层设为透明,不需要半透明背景可保留该行,不需要透明则删除即可
    overlay.modal: Rectangle {
        color: "transparent"
    }
    width: 100
    height: 100
    BusyIndicator {
        id: login_progress
        running: true
        anchors.fill: parent
    }
    anchors.centerIn: Overlay.overlay
    closePolicy: Popup.NoAutoClose
}

相关属性说明:

  • modal: true:Qt Quick Controls 2的Popup原生模态开关,开启后会自动拦截所有下层控件的鼠标、键盘输入事件,和系统弹出的MessageBox行为完全一致。
  • overlay.modal:自定义模态遮罩的样式,默认是半透明灰色背景,如果你不需要背景遮罩只保留加载动画和输入拦截,就可以把遮罩设为透明。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:06:03