1. 方法1:
C++结构体的每个成员都声明成QML的属性。QML中就可以直接以属性的方式读写。
.h文件
typedef struct {QString startRecord;QString fanSpeed;QString scrBrightness;QString printerType;
} ManuSet_t;class ManuSet : public QObject
{Q_OBJECTQ_PROPERTY(QString startRecord READ startRecord WRITE setStartRecord NOTIFY startRecordChanged)Q_PROPERTY(QString fanSpeed READ fanSpeed WRITE setFanSpeed NOTIFY fanSpeedChanged)Q_PROPERTY(QString scrBrightness READ scrBrightness WRITE setScrBrightness NOTIFY scrBrightnessChanged)Q_PROPERTY(QString printerType READ printerType WRITE setPrinterType NOTIFY printerTypeChanged)public:QString startRecord();void setStartRecord(const QString ¶);QString fanSpeed();void setFanSpeed(const QString ¶);QString scrBrightness();void setScrBrightness(const QString ¶);QString printerType();void setPrinterType(const QString ¶);signals:void startRecordChanged();void fanSpeedChanged();void scrBrightnessChanged();void printerTypeChanged();
}
.cpp文件中实现
main.cpp中注册类型
qmlRegisterType<ManuSet>("com.custom", 1, 0, "ManuSet");
qml文件中直接使用
import com.custom 1.0ManuSet{id: _msstartRecord: "test"
}
2. 方法2:
QVariantMap
的方式。
2.1 C++发送给QML
结构体
struct Info
{float tmp; // 温度int day_code; // 白天天气代码QString day_text; // 白天天气情况int night_code; // 夜间天气代码QString night_text; // 夜间天气情况
};
C++代码
//在minxCppDemo类中声明和定义
QVariantMap MixCppDemo::getInfo(Info *m_Info)
{QVariantMap map;map.clear();map.insert("tmp", m_Info->tmp);map.insert("day_code", m_Info->day_code);map.insert("day_text", m_Info->day_text);map.insert("night_code", m_Info->night_code);map.insert("night_text", m_Info->night_text);return map;
}
QML代码
MixCppDemo {id: minxCppDemo
}Component.onCompleted: {var textString = ''// 显示天气信息var currentInfo = minxCppDemo.getInfo()textString += '温度:' + currentInfo.tmp.toString() + '\n';textString += '白天天气代码: ' + currentInfo.day_code.toString() + '\n'textString += '白天天气情况: ' + currentInfo.day_text + '\n'textString += '夜间天气代码: ' + currentInfo.night_code.toString() + '\n'textString += '夜间天气情况: ' + currentInfo.night_text + '\n\n'console.log(textString);
}
2.2 QML发送给C++
结构体
struct Info
{float tmp; // 温度int day_code; // 白天天气代码QString day_text; // 白天天气情况int night_code; // 夜间天气代码QString night_text; // 夜间天气情况
};
QML代码
MixCppDemo {id: minxCppDemo
}function test(){var map = {};map.tmp = 25.5;//map["tmp"] = 25.5; //与上面的代码效果一样map.day_code = 1;map.day_text = "2";map.night_code = 3;map.night_text = "4";minxCppDemo.setInfo(map);
}
C++代码
Info m_Info;void MixCppDemo::setInfo(const QVariantMap map)
{m_Info.tmp = map.value("tmp").toString();//...qDebug() << map.value("tmp").toString();qDebug() << map.value("day_code").toString();qDebug() << map.value("day_text").toString();qDebug() << map.value("night_code").toString();qDebug() << map.value("night_text").toString();
}