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

在QML中使用C++枚举报错:无法将[undefined]赋值给int

解决QML中枚举赋值报错的问题

看到你遇到的Error: Cannot assign [undefined] to int报错,核心原因是QML里找不到你引用的枚举值,咱们一步步来修复:

1. 修正QML中枚举的引用名称

你在C++里定义枚举的类是SettingManager,注册的也是这个类,但QML代码里却写了BookManager.BookKind1——这明显是类型名写错了!应该改成SettingManager.BookKind1,修改后的QML代码如下:

onCurrentIndexChanged:
{
    if(tbarBookKindForDisplay.currentIndex==0)
    {
       settingManager.bookKind = SettingManager.BookKind1;
    }
    else if(tbarBookKindForDisplay.currentIndex==1){
        settingManager.bookKind = SettingManager.BookKind2;
     }           
}

2. 推荐用Q_ENUM替代Q_ENUMS(更规范)

Qt 5.5之后官方推荐使用Q_ENUM而非Q_ENUMS,它能更好地适配Qt元对象系统,让QML对枚举的识别更稳定。修改C++代码里的枚举声明部分:

class SettingManager : public QObject
{
    Q_OBJECT
public:
    enum BookKinds{
         BookKind1=0,
         BookKind2=1,
     };
     Q_ENUM(BookKinds) // 替换原来的Q_ENUMS
     Q_PROPERTY(BookKinds bookKind READ bookKind WRITE setBookKind NOTIFY bookKindChanged)

     // 其余代码保持不变...
};

3. 确保QML正确导入注册模块

在你的QML文件开头,必须导入你注册的Test模块,否则QML找不到SettingManager类型:

import Test 1.0

4. 额外验证点

  • 确认settingManager实例已在QML中正确创建(比如通过SettingManager { id: settingManager }声明,或者从C++上下文传入)。
  • 检查setBookKind函数的实现,确保它正确接收BookKinds类型参数,并且在赋值后触发bookKindChanged信号。

做完这些修改后,枚举值就能被QML正确识别,赋值报错的问题应该就解决了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:10:19