錯誤 invalid use of non-static data member 'main form zhiliu
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
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.0Rectangle{ Text{ text:zhiliu_datainfo }}
這下沒有錯誤了,不過卻不見Qml露面……UI都沒有出現是因為我沒有插串列埠的事嗎?
插上再看!
2012年10月9日20:46:30:還是不行,CPP的程式已經執行,再看看main.cpp中的:
#include <QtGui/QApplication>#include "main_form.h"#include <QDeclarativeView>#include <QDeclarativeContext>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 <QApplication>#include <QDeclarativeView>#include <QDeclarativeContext>#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.0Rectangle{ width: 300 height: 300 Text{ text:zhiliu }}
下邊是執行效果圖:
數也正確!OYE!!!!!
不急,殺個回馬槍把上邊假設的驗證一下:
①:中文目錄:結論:在LInux下中文目錄並不會導致Qt程式執行失敗!
②:沒了……呵呵 今天收穫不少!
========================================================================================================================
把微控制器接上再來欣賞一下 全流程 的:
糟糕!!!!,明明已經接到資料,QML裡邊為什麼還是“0”,莫非它只是,上電時獲取一次!加上timer試試……
2012年10月9日21:23:12:QML改為
import QtQuick 1.0Rectangle{ width: 300 height: 300 Text{ id:text text:zhiliu } Timer{ interval:500; running: tue; repeat:true onTriggered: text.text = zhiliu }}
結果還是不行!!在cpp中除錯一下,看值是不是沒有變……
2012年10月9日21:27:13:加上如下除錯資訊:
qDebug("%u",zhiliu_datainfo[0]);
不過執行結果是這樣的:
陣列中的值是變了,可是QML中還是0,好痛苦!!!
import QtQuick 1.0Item { 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];}
可以動態了,明天再完善一下……