Qt5.12下QML使用PieMenuStyle报__control未定义错误的解决咨询
报错原因
- 核心问题:
PieMenuStyle是配套PieMenu控件使用的样式类,不能脱离PieMenu单独实例化,你直接将PieMenuStyle放在Window下,样式类找不到绑定的目标控件,就会报__control未定义、control为null的错误。 - 次要问题:导入的Qt Quick Controls版本不兼容,
QtQuick.Controls.Styles 1.4是Qt Quick Controls 1系列的样式模块,和你导入的QtQuick.Controls 2.5(Qt Quick Controls 2)不匹配,且PieMenu属于Qt Quick Extras 1.x模块,你没有正确导入该模块。
修复步骤
- 调整导入语句,替换为Qt Quick Controls 1.4、Qt Quick Extras 1.4,和配套的Styles模块
- 先实例化
PieMenu控件,再将你写的PieMenuStyle赋值给PieMenu的style属性 - 补充
PieMenu的菜单项配置,验证样式效果
修复后完整代码
import QtQuick 2.12 import QtQuick.Window 2.12 // 替换为Controls 1.x版本,和Styles 1.4兼容 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 // 导入PieMenu所在的Extras模块 import QtQuick.Extras 1.4 Window { width: 640 height: 480 visible: true title: qsTr("Hello World") // 先实例化PieMenu控件 PieMenu { id: pieMenu visible: true anchors.centerIn: parent // 给菜单加测试项 MenuItem { text: "选项1" } MenuItem { text: "选项2" } MenuItem { text: "选项3" } MenuItem { text: "选项4" } // 将你写的样式赋值给style属性 style: PieMenuStyle { shadowRadius: 0 menuItem: Item { id: item rotation: -90 + sectionCenterAngle(styleData.index) Rectangle { width: parent.height * 0.2 height: width color: "darkorange" radius: width / 2 anchors.right: parent.right anchors.verticalCenter: parent.verticalCenter Text { id: textItem text: control.menuItems[styleData.index].text anchors.centerIn: parent color: control.currentIndex === styleData.index ? "red" : "white" rotation: -item.rotation } } } } } }
内容的提问来源于stack exchange,提问作者Hamsha m
相关产品推荐
相关产品推荐

