qml: ReferenceError: serial is not defined

qml编译警告:qrc:/Form02.qml:67: ReferenceError: serial is not defined

serial是我自定义的一个串口线程,在编译时报警告说serial未定义,但又能正常访问获取数据,使用代码示例如下:

示例代码:

cpp 复制代码
{
    //1
    ui->quickWidget_2->setSource(QUrl("qrc:/Form02.qml"));
    //2
    serial = new SerialPort;
    ui->quickWidget_2->rootContext()->setContextProperty("serial", serial);
    ui->quickWidget_2->setResizeMode(QQuickWidget::SizeRootObjectToView);
    //3 cpp 与 qml信号连接
    QObject* obj = ui->quickWidget_2->rootObject();
    if(QMetaObject::invokeMethod(obj, "slotOpenSerial", Qt::DirectConnection, Q_ARG(bool, true), Q_ARG(QString, "")))
        connect(serial, SIGNAL(openMsg(bool,QString)), obj, SIGNAL(slotOpenSerial(bool,QString)));
}

解决办法:先设置串口对象在根节点中的name,再将qml添加到quickWidget

cpp 复制代码
{
    //1
    serial = new SerialPort;
    ui->quickWidget_2->rootContext()->setContextProperty("serial", serial);
    ui->quickWidget_2->setResizeMode(QQuickWidget::SizeRootObjectToView);
    //2
    ui->quickWidget_2->setSource(QUrl("qrc:/Form02.qml"));
    //3 cpp 与 qml信号连接
    QObject* obj = ui->quickWidget_2->rootObject();
    if(QMetaObject::invokeMethod(obj, "slotOpenSerial", Qt::DirectConnection, Q_ARG(bool, true), Q_ARG(QString, "")))
        connect(serial, SIGNAL(openMsg(bool,QString)), obj, SIGNAL(slotOpenSerial(bool,QString)));
}
相关推荐
Felix_One19 小时前
Qt 串口通信避坑指南:QSerialPort 的 5 个常见问题
qt
blasit4 天前
笔记:Qt C++建立子线程做一个socket TCP常连接通信
c++·qt·tcp/ip
范特西.i9 天前
QT聊天项目(8)
开发语言·qt
枫叶丹49 天前
【Qt开发】Qt界面优化(七)-> Qt样式表(QSS) 样式属性
c语言·开发语言·c++·qt
十五年专注C++开发9 天前
Qt deleteLater作用及源码分析
开发语言·c++·qt·qobject
kangzerun9 天前
SQLiteManager:一个优雅的Qt SQLite数据库操作类
数据库·qt·sqlite
金刚狼889 天前
qt和qt creator的下载安装
开发语言·qt
追烽少年x9 天前
Qt中使用Zint库显示二维码
qt
谁刺我心9 天前
qt源码、qt在线安装器镜像下载
开发语言·qt
金刚狼889 天前
在qt creator中创建helloworld程序并构建
开发语言·qt