Я делаю небольшой проект для подключения ESP8266 напрямую к приложению android.
Общий вид - я храню серию показаний датчиков на ESP и считываю их с помощью C ++ учебный класс. После этого я передаю эти значения как list<int>
в код QML.
До этого момента все работало нормально. Я могу отправить и распечатать значения в конце QML. Однако, когда я передаю их в свойство barseries.values, оно не работает.
Для простоты я продемонстрирую проблему с фиксированным list<int>
.
C ++ методом в ApplicationData:
std::vector<int> ApplicationData::getlast12hours(void)
{
std::vector<int> myList = {1,3,3,4,5,6,10,12,30,45,55,12};
return myList;
}
c ++ main. cpp
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QApplication app(argc, argv);
QQuickView view;
const QUrl url(QStringLiteral("qrc:/main.qml"));
ApplicationData data;
view.rootContext()->setContextProperty("applicationData", &data);
view.setSource(url);
view.show();
return app.exec();
}
main.qml
MainForm {
//somecode
OperationForm
{
property var myarray:applicationData.getlast24hours()
property var mytest:[1,3,3,4,5,6,10,12,30,45,55,12]
bs_hist12h.values: [myarray[0],myarray[1],myarray[2],myarray[3],myarray[4],myarray[5],myarray[6],myarray[7],myarray[8],myarray[9],myarray[10],myarray[11]]
}
//somecode
}
Теперь вот проблема; когда я устанавливаю bs_hist12h.values: myarray, он не работает. Но когда я установил, как указано выше, это работает. И когда я установил его как bs_hist12h.values: mytest, он тоже работает. Самое смешное, что при отладке myarray и mytest - это один и тот же объект. На самом деле, способ, которым я занимаюсь, решает проблему, но очень уродливо. Интересно, есть ли более сложный подход?
Наконец, операцияform.ui.qml
//some code
ChartView {
//some code
BarSeries {
name: "BarSeries"
axisX: BarCategoryAxis { categories: ["00","01","02","03","04","05","06","07","08","09","10","11"]}
BarSet {
id: bs_hist12h
}
//somecode
}
}
//somecode