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

QML中ButtonGroup遍历按钮及字体下划线状态切换问题

解决QML ButtonGroup遍历按钮报错并实现点击下划线效果

嘿,你遇到的报错问题其实是个常见的小细节坑——ButtonGroup并不会把关联的按钮当作自己的子控件,它是通过ButtonGroup.group属性来绑定按钮的,所以要遍历所有按钮得用它专门的buttons数组,而不是children属性,这就是你报错ReferenceError: children is not defined的原因。

修正后的完整代码

Button {
    text: qsTr("Open")
    ButtonGroup.group: buttonGroup
    font.pointSize: 20; font.family: "Courier"
    onPressed: { /* 你的点击逻辑 */ }
    onReleased: { /* 你的释放逻辑 */ }
}

Button {
    text: qsTr("Close")
    ButtonGroup.group: buttonGroup
    font.pointSize: 20; font.family: "Courier"
    onPressed: { /* 你的点击逻辑 */ }
    onReleased: { /* 你的释放逻辑 */ }
}

ButtonGroup {
    id: buttonGroup

    function underlineButtons(underlined) {
        // 把children替换成buttons,遍历所有关联的按钮
        for (var i = 0; i < buttons.length; ++i) {
            buttons[i].font.underline = underlined;
        }
    }

    onClicked: {
        console.log("-------------- buttonGroup Clicked: ", button.text)
        underlineButtons(false) // 先恢复所有按钮的下划线状态
        button.font.underline = true // 给当前点击的按钮添加下划线标记
    }
}

关键逻辑说明

  1. ButtonGroup的按钮集合:所有通过ButtonGroup.group绑定的按钮,都会被自动收集到ButtonGroup的buttons数组里,这才是正确的按钮遍历入口,children属性是用来存储ButtonGroup自己的子控件(比如嵌套的其他组件),和关联的按钮没关系。
  2. 点击状态管理:每次点击按钮时,先批量取消所有按钮的下划线,再单独给当前点击的按钮设置下划线,这样就能确保始终只有最后点击的按钮保持下划线样式,完全符合你的需求。

后续如果要新增按钮,只需要给新按钮加上ButtonGroup.group: buttonGroup即可,不用修改ButtonGroup的逻辑,扩展性拉满。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:33:09