Skip to content

0919yunhuan_UI总结

ziyouzy edited this page Sep 20, 2019 · 16 revisions

关于如何替换一个空调:

1.将原来的model_xxx数据计算模块删除,复制过来新的model_yyy

2.pro配置结束后,系统会提示mainwindow_slot_rnaread.cpp报错,错误存在于对于mapService字典的录入环节,请进行代码替换,安全起见需要rebuild或者删除gcc文件,没有需要动脑的地方,唯一需要注意的是3030e空调,制冷状态需要一次二次调用

3.接下来程序会跑起来,但是要沿着mapService向外层寻找流向,可以找到mainwindow_timerslot_changeltddate.cpp中的MyLTDDataWidget->serviceLtdDataWidget_newupdate(),其作为了函数参数,函数的本地存在于ltddatawidgetservice.cpp。

3.1从中可以发现,kt会分为两个(kt1,kt2),是因为有些显示的值为float,有些为字符串,这次只保留了回风温度,要注意,只保留了回风温度,但是需要把删除的那两个变量注释掉,有助于下一步修改,运行后,才会提示datawidget中的painEvent的错误

4.然后是datawidget中的painEvent,对于显示区的各个修改,注释掉kt的整个模块,也就是整个仪表盘

5.datawidget中发现了slot_resetonline,是一个很“遥远的函数”设置页面的clickbox发生改变时,会触发这个函数,但是却很整洁干净的完成了修改当前设置,以及setting.ini的所有功能

5.1mainwindow.cpp 155-160:

connect(myLtdsettingPage,SIGNAL(sig_toltdwidgetforresetallonline(QString)),MyLTDDataWidget,SLOT(slot_resetonline(QString))); connect(myLtdsettingPage,SIGNAL(sig_toltdwidgetforresetallonline(QString)),this,SLOT(slot_ResetMSGfactory(QString)));

setting_page.cpp 175-180: connect(mySetting_Detail,SIGNAL(sig_toltdwidgetforresetallonline(QString)),this,SIGNAL(sig_toltdwidgetforresetallonline(QString))); setting_detail.cpp 1165-1170: void Setting_Detail::slot_ResetALLCBOX(){ sig_toltdwidgetforresetallonline(sender()->objectName()); }

引出了void Setting_Detail::slot_ResetALLCBOX(),但是到这里其实也不需要担心了,因为settingdetail和settingpage都是最新替换的,所以只有mainwindow.cpp 155-160需要添加 这个和setting.cpp的移植同步做

(mainwindow155-160) setting.cpp已经移植过了

将slot_resetonline(QString)与信号cao链接后 运行会出现myltddatawidget.h中 bool onlinewsd =true; bool onlinesj =true; bool onlineyg =true; bool onlinetc =true; bool onlinezndb =true; bool onlineups =true; bool onlinekt =true; bool onlinedoor =true; bool onlinebjsz =true; bool onlinejksz =true; 未定义,添加即可

6.接下来就是datawidget的各个显示节点了,先修改吧,看看效果吧,除了painevent其他的什么先都不用改

暂不修改timerSlot_selfUpdater()里的内容

6.1.datawidget的初始化函数中存在这个模块,将其添加进去:

QSettings st("/yunhuan/setting.conf",QSettings::IniFormat); QString s;

if(st.contains(tr("AboutWSD/myQtonlineWSD"))){
    s =st.value("AboutWSD/myQtonlineWSD").toString();
    if(s.compare("open")==0||s.compare("openlock")==0)
        onlinewsd =true;

    if(s.compare("close")==0||s.compare("closelock")==0)
        onlinewsd =false;
}

if(st.contains(tr("AboutSJ/myQtonlineSJ"))){
    s =st.value("AboutSJ/myQtonlineSJ").toString();
    if(s.compare("open")==0||s.compare("openlock")==0)
        onlinesj =true;

    if(s.compare("close")==0||s.compare("closelock")==0)
        onlinesj =false;
}

if(st.contains(tr("AboutYG/myQtonlineYG"))){
    s =st.value("AboutYG/myQtonlineYG").toString();
    if(s.compare("open")==0||s.compare("openlock")==0)
        onlineyg =true;

    if(s.compare("close")==0||s.compare("closelock")==0)
        onlineyg =false;
}

if(st.contains(tr("AboutTC/myQtonlineTC"))){
    s =st.value("AboutTC/myQtonlineTC").toString();
    if(s.compare("open")==0||s.compare("openlock")==0)
        onlinetc =true;

    if(s.compare("close")==0||s.compare("closelock")==0)
        onlinetc =false;
}

if(st.contains(tr("AboutZNDB/myQtonlineZNDB"))){
    s =st.value("AboutZNDB/myQtonlineZNDB").toString();
    if(s.compare("open")==0||s.compare("openlock")==0)
        onlinezndb =true;

    if(s.compare("close")==0||s.compare("closelock")==0)
        onlinezndb =false;
}

if(st.contains(tr("AboutUPS/myQtonlineUPS"))){
    s =st.value("AboutUPS/myQtonlineUPS").toString();
    if(s.compare("open")==0||s.compare("openlock")==0)
        onlineups =true;

    if(s.compare("close")==0||s.compare("closelock")==0)
        onlineups =false;
}

if(st.contains(tr("AboutKT/myQtonlineKT"))){
    s =st.value("AboutKT/myQtonlineKT").toString();
    if(s.compare("open")==0||s.compare("openlock")==0)
        onlinekt =true;

    if(s.compare("close")==0||s.compare("closelock")==0)
        onlinekt =false;
}

if(st.contains(tr("AboutBJSZ/myQtonlineBJSZ"))){
    s =st.value("AboutBJSZ/myQtonlineBJSZ").toString();
    if(s.compare("open")==0||s.compare("openlock")==0)
        onlinebjsz =true;

    if(s.compare("close")==0||s.compare("closelock")==0)
        onlinebjsz =false;
}

if(st.contains(tr("AboutJKSZ/myQtonlineJKSZ"))){
    s =st.value("AboutJKSZ/myQtonlineJKSZ").toString();
    if(s.compare("open")==0||s.compare("openlock")==0)
        onlinejksz =true;

    if(s.compare("close")==0||s.compare("closelock")==0)
        onlinejksz =false;
}

6.2.试着修改了一个,其实还算容易,因为设备未挂在和设备正常是一样的,复制一下即可,具体如下:

if(!onlinewsd){

    painter.setPen(Qt::white);
    foreImg.load("/root/basic_cricle_green_simple.png");
    foreImg =foreImg.scaled(basic_size/*,Qt::IgnoreAspectRatio,Qt::SmoothTransformation*/);
    painter.drawPixmap(1024+1024-40-120,40,foreImg);
}else if(maxwsdsd<coreFlSd[2]||minwsdsd>=coreFlSd[2]){
    painter.setPen(Qt::red);
    foreImg.load("/root/basic_cricle_red_simple.png");
    foreImg =foreImg.scaled(basic_size/*,Qt::IgnoreAspectRatio,Qt::SmoothTransformation*/);
    painter.drawPixmap(1024+1024-40-120,40,foreImg);
}else{
    painter.setPen(Qt::white);
    foreImg.load("/root/basic_cricle_green_simple.png");
    foreImg =foreImg.scaled(basic_size/*,Qt::IgnoreAspectRatio,Qt::SmoothTransformation*/);
    painter.drawPixmap(1024+1024-40-120,40,foreImg);

}
painter.setFont(fontheiti);

if(!onlinewsd){
    painter.drawText(1024+85+270+270+270,110,"--");
}else if(coreStrSd[2].compare("9999") !=0){
    painter.drawText(1024+85+270+270+270,110,coreStrSd[2]+"%");
}
painter.setFont(fontheitismall);
painter.drawText(1024+1024-50-90,200,"后门湿度");

painter.setPen(Qt::white);

    foreImg.load("/root/basic_cricle_green_simple.png");
    foreImg =foreImg.scaled(basic_size/*,Qt::IgnoreAspectRatio,Qt::SmoothTransformation*/);
    painter.drawPixmap(1024+1024-40-120,40,foreImg)

复制这个即可,里面包涵文字是白还是红,下面的drawtext写好if(!onlinewsd)即可

临时情况,当前ups,智能电表,空调是锁定状态,需要解锁,因为之前设计冷通道被锁定了

临时情况,datawidget和yibiaowidget的报警对应关系错位,也是因为冷通道的原因

在修改第一个临时情况时,发现了datawidget中的MyLTDDataWidget->slot_resetonline(QString)中存在两个if(id.compare("ups") ==0)造成了ups的相关设置失效,删除一个后一切正常。好消息是,设置也的锁定是通过修改setting.ini实现的,所以修改起来容易很多很多

9月20日 14:25,开始修改第二个临时情况

这个其实挺重要的,因为一会还是很有纪律遇到冷通道与智能机柜的切换问题:

1.沿着datawidget中的sig_selftimerWARN向上寻找,在mainwindow中找到:connect(MyLTDDataWidget,SIGNAL(sig_selftimerWARN(QString)),MyLTDYibiaoWidget,SLOT(slot_formSelfTimerWARN(QString)));

沿着slot_formSelfTimerWARN往上寻找,存在着一个分支,一个是通过: mainwindow_warningservice.cpp里void MainWindow::slot_formSelfTimerWARN(QString str)对数据库的0->1的预警操作, 另一个是LTDYibiaoWidget.cpp里void LtdYibiaoWidget::slot_formSelfTimerWARN(QString str)对yibiaowidget的红绿显示操作

9月20日 14:35,yibiaowidget修改完成,其实没有什么错误

向上寻找到runablewarndbvonde_init,这里发现需要修改的内容是:

if(nodename.compare("kt") ==0){
    nodename ="494f3031210304";
}else if(nodename.compare("wsd") ==0){
    nodename ="494f3031010304";
}else if(nodename.compare("zndb") ==0){
    nodename ="494f3031310308";
}else if(nodename.compare("ups") ==0){
    nodename ="494f3031110418";
}else if(nodename.compare("io") ==0){
    nodename ="494f3031f10201";
}

将空调的210308改成ek3030e专属的210304

9月20 14:44至此所有的都改完了

9月20 14:53发现错误,是关于setting.ini的,setting_detail中操作的是像About_ZNDB这样的笼统名称(setting_detail的本质是void SettingKeyboard::QSettingWorker),而datawidget中读取的是带具体名称的节点,先将datawidget中的具体名称改成笼统名称

test2

Clone this wiki locally