google翻译:使用无效的非静态数据成员的main_form:: zhiliu_datainfo;难不成只能使用静态的数据?
静态就静态了,这个又不是不可以改的,(以前把静态变量和常量进行了混淆,现在明白了,这就不是个问题了)
果断加上static:
Q_INVOKABLE static u_char zhiliu_datainfo[30]; //直流
错误:undefined reference to `main_form::zhiliu_datainfo'
出错 了,google一下:未定义的参考`main_form:: zhiliu_datainfo“
哦,它说的没有定义,呵,我在CPP中定义一下,再看,不过初值定为多少呢?就全为零吧!
这样定义:u_char main_form::zhiliu_datainfo[30]={0x00};
file:///root/æ¡Œé¢/kangear/qt/serialport/1.5-3.6(Qt+Qml)/MyItem2.qml:4: ReferenceError: Can't find variable: zhiliu_datainfo
这下编译是通过了,不过Qml又找不到了这个值,我看看我前几天的文章再:《QML调用Qt_CPP中的变量》http://blog.csdn.net/kangear/article/details/8042187
哈哈 终于找到原因了我名字起成“zhiliu”,而我在Qml却写成了zhiliu_datainfo,怪不呢!!!
import QtQuick 1.0
Rectangle{
Text{
text:zhiliu_datainfo
}
}
这下没有错误了,不过却不见Qml露面……UI都没有出现是因为我没有插串口的事吗?
插上再看!
2012年10月9日20:46:30:还是不行,CPP的程序已经运行,再看看main.cpp中的:
#include
#include "main_form.h"
#include
#include
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QDeclarativeView view;
main_form w;
// view.rootContext()->setContextProperty("applicationData", &w);
view.rootContext()->setContextProperty("zhiliu",*main_form::zhiliu_datainfo);
// view.rootContext()->setContextProperty("jiaoliu",*main_form::jiaoliu_datainfo);
// view.rootContext()->setContextProperty("dianchi",*main_form::dianchi_datainfo);
// view.rootContext()->setContextProperty("jueyuan",*main_form::jueyuan_datainfo);
// view.rootContext()->setContextProperty("kuixian",*main_form::kuixian_datainfo);
// view.rootContext()->setContextProperty("nibian",*main_form::nibian_datainfo);
// view.rootContext()->setContextProperty("DCtoDC",*main_form::DCtoDC_datainfo);
view.setSource(QUrl::fromLocalFile("../MyItem2.qml"));
view.show();
// w.show();
return a.exec();
}
再看看标准的Qml和CPP混合编程main.cpp:
#include
#include
#include
#include "applicationdata.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QDeclarativeView view;
ApplicationData data;
view.rootContext()->setContextProperty("applicationData", &data);
view.setSource(QUrl::fromLocalFile("../myDeclarativeContext100/MyItem.qml"));
view.show();
return app.exec();
}
改成一样的看看.............
2012年10月9日20:55:05:不行,仍然没有,这程序绝对在戏弄我!!!
2012年10月9日21:01:30:换成全英文目录:结果:不行!
2012年10月9日21:05:28:泪奔!!我QML没设置大小,估计是有了,不过我看不到而已!!!
改为:
import QtQuick 1.0 Rectangle{ width: 300 height: 300 Text{ text:zhiliu } }
下边是运行效果图:
数也正确!OYE!!!!!
不急,杀个回马枪把上边假设的验证一下:
①:中文目录:结论:在LInux下中文目录并不会导致Qt程序运行失败!
②:没了……呵呵 今天收获不少!
========================================================================================================================
把单片机接上再来欣赏一下 全流程 的:
糟糕!!!!,明明已经接到数据,QML里边为什么还是“0”,莫非它只是,上电时获取一次!加上timer试试……
2012年10月9日21:23:12:QML改为
import QtQuick 1.0
Rectangle{
width: 300
height: 300
Text{
id:text
text:zhiliu
}
Timer{
interval:500;
running: tue;
repeat:true
onTriggered: text.text = zhiliu
}
}
2012年10月9日21:27:13:加上如下调试信息:
qDebug("%u",zhiliu_datainfo[0]);
不过运行结果是这样的:
数组中的值是变了,可是QML中还是0,好痛苦!!!
import QtQuick 1.0
Item {
Timer {
interval: 500; running: true; repeat: true
onTriggered: time.text = Qt.formatDateTime(new Date(), "dddd\nyyyy-MM-dd\n-MMM-\nhh-mm-ss")
// 星期 年份 月份 号 大月份
}
Text { id: time }
}
上边这么简单的程序都能动态显示时间,我的为什么不能动态显示数据呢???
==============================================================================================================
2012年10月9日21:35:44:
静下心来好好想想,暂且不想为什么不行了,还是想想如何得到数据为首要任务!对比了上边的动态显示时间的程序,这个是个函数,而我的是这数组,我按照这各种形式改为函数试试:参考《QML调用Qt_CPP中的变量》http://blog.csdn.net/kangear/article/details/8042187
2012年10月9日21:56:05:
不死心,先看看QML中定时器是否正常运行,把上边显示时间的程序拷进去看看:
时间正常动态显示,说明timer没有问题……
估计我得死心了,我得改为函数返回的方式了……
2012年10月9日22:33:21:
写这样一个回调小函数:
unsigned char main_form::displayData() { return zhiliu_datainfo[0]; }
可以动态了,明天再完善一下……