1. 方法1:
C++结构体的每个成员都声明成QML的属性。QML中就可以直接以属性的方式读写。
.h文件
typedef struct {
QString startRecord;
QString fanSpeed;
QString scrBrightness;
QString printerType;
} ManuSet_t;
class ManuSet : public QObject
{
Q_OBJECT
Q_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.0
ManuSet{
id: _ms
startRecord: "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();
}