您的位置:首页 > 大数据 > 人工智能

错误:invalid use of non-static data member 'main_form::zhiliu_datainfo'

2012-10-09 20:19 579 查看
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中的变量/article/2693569.html

哈哈 终于找到原因了我名字起成“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 <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.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
    }
}


结果还是不行!!在cpp中调试一下,看值是不是没有变……

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中的变量/article/2693569.html

2012年10月9日21:56:05:

不死心,先看看QML中定时器是否正常运行,把上边显示时间的程序拷进去看看:



时间正常动态显示,说明timer没有问题……

估计我得死心了,我得改为函数返回的方式了……

2012年10月9日22:33:21:

写这样一个回调小函数:

unsigned char main_form::displayData()
{
    return zhiliu_datainfo[0];

}


可以动态了,明天再完善一下……
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐