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
相关产品推荐
相关产品推荐

