QML中自定义控件出错Cannot assign to non-existent property “myCheckBox“

本文介绍在QML中自定义控件时遇到的一个常见问题:控件名称大小写敏感。通过一个具体的例子——自定义一个名为MyCheckBox的控件——展示了如何正确地创建并引用自定义控件。

现象

在qml中,自定义一个myCheckBox控件,新建一个myCheckBox.qml文件,在其中添加如下代码。

CheckBox{
    width: 10
    height: 10
    tristate:true
    onClicked: {
        console.log("clicked check box");
    }
}

在main.qml中调用

myCheckBox{

 }

原因及解决方案

原因:因为在qml中,自定义的控件,文件名必须要大写,否则不能识别。真的是有点坑!!!
方案:把myCheckBox改为MyCheckBox,则可以正常调用了。

MyCheckBox{

 }
QML中出现 `Cannot assign to non-existent property "exclusive"` 错误,意味着代码尝试给一个并不存在于该对象中的 `exclusive` 属性赋值。以下是几种可能的解决办法: ### 确认对象是否支持 `exclusive` 属性 要保证所操作的对象类型确实有 `exclusive` 属性。不同的QML组件支持的属性不同,要是使用了不支持该属性的组件,就会出现此错误。例如,若代码如下: ```qml import QtQuick 2.15 import QtQuick.Window 2.15 Window { visible: true width: 640 height: 480 title: "Test" Rectangle { id: rect width: 100 height: 100 color: "red" exclusive: true // 错误,Rectangle 不支持 exclusive 属性 } } ``` 解决方案是检查并使用支持 `exclusive` 属性的组件,像 `ButtonGroup` 就支持该属性: ```qml import QtQuick 2.15 import QtQuick.Window 2.15 import QtQuick.Controls 2.15 Window { visible: true width: 640 height: 480 title: "Test" ButtonGroup { id: buttonGroup exclusive: true // 正确,ButtonGroup 支持 exclusive 属性 } Button { text: "Button 1" checkable: true buttonGroup: buttonGroup } Button { text: "Button 2" checkable: true buttonGroup: buttonGroup } } ``` ### 检查属性名拼写 要仔细检查属性名的拼写是否正确,因为QML对属性名的大小写敏感。比如,若将 `exclusive` 写成 `Exclusive` 就会出错。 ### 检查组件版本 某些属性可能是在特定版本的QML组件中才被支持。要确保使用的QML组件版本支持 `exclusive` 属性。可以通过修改导入语句中的版本号来检查,例如: ```qml import QtQuick.Controls 2.15 // 尝试不同版本 ``` ### 动态添加属性 若确实需要给对象添加 `exclusive` 属性,可以借助 `QtObject` 来动态添加属性。示例如下: ```qml import QtQuick 2.15 import QtQuick.Window 2.15 Window { visible: true width: 640 height: 480 title: "Test" QtObject { id: myObject property bool exclusive: true // 动态添加 exclusive 属性 } Text { text: "Exclusive value: " + myObject.exclusive } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值