wjhx 2025-02-20 10:01 采纳率: 50%
浏览 15

在QML中使用C++类时的警告

在QT版本6.8中开发android,在C++中注册一个类

    engine.rootContext()->setContextProperty("c_db", &sqlite_class);

在qml中调用时,可以直接使用

c_db.insert_data(x, y)

这个在QT5中是正常的,在6.8中会提示

Unqualified access[unqualified]

有说法在qml文件加入

property var c_db: c_db

但这个没有作用
虽然这个警告不影响使用,但总是个问题,指不定在哪个版本上就成了异常

  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2025-02-20 10:01
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    在QML中使用C++类时的警告

    你在使用QT 6.8开发Android应用时,在C++中注册一个类,使用engine.rootContext()->setContextProperty("c_db", &sqlite_class)语句,但是却出现了警告。

    这个警告可能是因为在C++中注册的类没有被正确地导出,导致QML无法正确地访问这个类。

    解决方案:

    1. 在C++类中添加Q_DECLARE_METATYPE宏,例如:
    Q_DECLARE_METATYPE(SqliteClass*)
    
    1. 在C++类中添加QML_ELEMENT宏,例如:
    QML_ELEMENT
    class SqliteClass : public QObject {
        // ...
    };
    
    1. 在QML文件中使用import语句,例如:
    import QtQuick 2.15
    import QtQml 2.15
    
    1. 在QML文件中使用Component语句,例如:
    Component {
        id: sqliteComponent
        SqliteClass {
            id: sqliteObject
        }
    }
    
    1. 在QML文件中使用Property语句,例如:
    Property {
        id: sqliteProperty
        value: sqliteObject
    }
    

    这样,QML就可以正确地访问C++类了。

    如果你还出现了其他问题,可以提供更多的代码和错误信息,我将尽力帮助你解决问题。

    评论

报告相同问题?

问题事件

  • 创建了问题 2月20日