日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

基于Zigbee的智能路灯控制系统的Qt操作界面

發(fā)布時間:2023/12/29 windows 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于Zigbee的智能路灯控制系统的Qt操作界面 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本項目已經(jīng)用于參加過比賽,在加之本人確實有點忙,所以拖到現(xiàn)在才發(fā)。這里只詳細說明關(guān)于Qt控制界面的相關(guān)功能說明,本來是19年寫的,代碼量有點大,具體的地方,我自己都可能有點遺忘了,不過還是發(fā)出來供大家參考使用,因為當(dāng)初時間緊迫可能代碼格式不夠規(guī)范,看起來有些吃力,希望大家見諒,大部分核心的控制函數(shù),我還是有較為詳細的功能說明的。
言歸正傳,因為代碼量確實大,總和代碼量大概在2000+行的樣子,所以我就只在博文中說明部分即可,若想進一步了解的話,請自行點擊下方的下載鏈接進行下載。
首先,本項目Qt操作界面的整體功能框架如下:

已經(jīng)用于的功能和帶擴展的功能,上圖都已經(jīng)有說明。
下面進行分部分介紹:

一、 智能照明

本智能路燈可以根據(jù)光照亮度,來進行自動照明。其通過光敏傳感器所接收到的光照,判斷其光照強度,外界環(huán)境較亮?xí)r(即傍晚)照射黃光,外界環(huán)境光亮弱時(即夜晚)照射白光。(這個部分是Zigbee部分的控制,Qt只是在控制切換自動模式還是手動模式)

此外還可以通過上位機Qt端的天氣情況,將數(shù)據(jù)發(fā)送到ZigBee端,自動轉(zhuǎn)換燈色,以適應(yīng)天氣。(聯(lián)網(wǎng)獲取天氣信息在文章后面會提)

此外,系統(tǒng)設(shè)計之初設(shè)置有光強的漸變,即在智能自動模式下,燈光會根據(jù)環(huán)境的光照情況或燈內(nèi)部的紅外傳感是否感應(yīng)到行人來自動調(diào)節(jié)光線強度,目前光強漸變功能正處于研究與測試階段。(Qt的界面控制中有否有人通過的圖像顯示標(biāo)識)

void Widget::open_sum ()//燈開關(guān)設(shè)定******P {if(ui->checkBox_lighting_1->checkState ()==0&&ui->checkBox_lighting_2->checkState ()==0){qDebug()<<"請勾選需要點亮的燈泡";QMessageBox::information (this,"提示","請勾選需要點亮的燈泡");ui->label_bulb_1->setPixmap (QPixmap("phono/bulb_notlighting.png"));ui->label_bulb_1->setScaledContents (true);//使圖片適于label的大小ui->label_bubl_2->setPixmap (QPixmap("phono/bulb_notlighting.png"));ui->label_bubl_2->setScaledContents (true);//使圖片適于label的大小}if(ui->checkBox_lighting_1->checkState ()==2&&ui->checkBox_lighting_2->checkState ()==0){chocie="1";if(ui->comboBox_lighting_1->currentText ()=="white"){P_1="1";P_2="3";ui->label_bulb_1->setPixmap (QPixmap("phono/bulb_white.png"));ui->label_bulb_1->setScaledContents (true);//使圖片適于label的大小}if(ui->comboBox_lighting_1->currentText ()=="yellow"){P_1="0";P_2="3";ui->label_bulb_1->setPixmap (QPixmap("phono/bulb_yellow.png"));ui->label_bulb_1->setScaledContents (true);//使圖片適于label的大小}ui->label_bubl_2->setPixmap (QPixmap("phono/bulb_notlighting.png"));ui->label_bubl_2->setScaledContents (true);//使圖片適于label的大小send_datas ();}if(ui->checkBox_lighting_1->checkState ()==0&&ui->checkBox_lighting_2->checkState ()==2){chocie="2";if(ui->comboBox_lighting_2->currentText ()=="white"){P_1="3";P_2="0";ui->label_bubl_2->setPixmap (QPixmap("phono/bulb_white.png"));ui->label_bubl_2->setScaledContents (true);//使圖片適于label的大小}if(ui->comboBox_lighting_2->currentText ()=="yellow"){P_1="3";P_2="1";ui->label_bubl_2->setPixmap (QPixmap("phono/bulb_yellow.png"));ui->label_bubl_2->setScaledContents (true);//使圖片適于label的大小}ui->label_bulb_1->setPixmap (QPixmap("phono/bulb_notlighting.png"));ui->label_bulb_1->setScaledContents (true);//使圖片適于label的大小send_datas ();}if(ui->checkBox_lighting_1->checkState ()==2&&ui->checkBox_lighting_2->checkState ()==2){chocie="3";if(ui->comboBox_lighting_1->currentText ()=="white"){P_1="1"; // P_2="1";ui->label_bulb_1->setPixmap (QPixmap("phono/bulb_white.png"));ui->label_bulb_1->setScaledContents (true);//使圖片適于label的大小}if(ui->comboBox_lighting_2->currentText ()=="white"){ // P_1="1";P_2="0";ui->label_bubl_2->setPixmap (QPixmap("phono/bulb_white.png"));ui->label_bubl_2->setScaledContents (true);//使圖片適于label的大小}if(ui->comboBox_lighting_1->currentText ()=="yellow"){P_1="0"; // P_2="0";ui->label_bulb_1->setPixmap (QPixmap("phono/bulb_yellow.png"));ui->label_bulb_1->setScaledContents (true);//使圖片適于label的大小}if(ui->comboBox_lighting_2->currentText ()=="yellow"){ // P_1="0";P_2="1";ui->label_bubl_2->setPixmap (QPixmap("phono/bulb_yellow.png"));ui->label_bubl_2->setScaledContents (true);//使圖片適于label的大小}send_datas ();//發(fā)送數(shù)據(jù)給下位機}}

里面存在很多圖像標(biāo)識設(shè)置。

二、路燈升降,角度轉(zhuǎn)動

本智能路燈可以控制升降。它分為自動模式和手動模式。自動模式下路燈將自動調(diào)節(jié)照射的范圍,使照射到地面上的光照更強,達到較好照明效果。手動模式下,用戶可手動控制路燈高低,路燈與地面的仰角。在現(xiàn)實應(yīng)用中,該模式不僅方便維修人員進行相關(guān)操作,減少維修人員高空作業(yè)風(fēng)險,還使路燈控制更加人性化。(大部分語句使用的是我們報告中的語句,所以顯的有點那啥。。。哈哈哈)
這個部分功能的實現(xiàn)主要使用的滑塊組件與qss語言的配合實現(xiàn)的圖像的變換,因為本人還沒有系統(tǒng)的學(xué)習(xí)關(guān)于Qt自定義控件的設(shè)計,所以只能依托PS和qss語句進行變換圖像的顯示功能。
路燈的升降:

void Widget::send_up()//燈部上升****G {if(ui->checkBox_dial_1->checkState ()==0&&ui->checkBox_dial_2->checkState ()==0){qDebug()<<"未被選中";QMessageBox::information (this,"提示","請勾選需要升降的路燈");}if(ui->checkBox_dial_1->checkState ()==2&&ui->checkBox_dial_2->checkState ()==0)//選擇燈口1{chocie="1";G_1="1";G_2="0";send_datas ();}if(ui->checkBox_dial_1->checkState ()==0&&ui->checkBox_dial_2->checkState ()==2)//選擇燈口2{chocie="2";G_2="1";G_1="0";send_datas ();}if(ui->checkBox_dial_1->checkState ()==2&&ui->checkBox_dial_2->checkState ()==2)//選擇燈口1,2{chocie="3";G_1="1";G_2="1";send_datas ();}}void Widget::show_up () {int max=6;int min=0;ui->verticalSlider_light->setRange (min,max);ui->verticalSlider_light->setSingleStep (1);ui->verticalSlider_light_2->setRange (min,max);ui->verticalSlider_light_2->setSingleStep (1);if(ui->checkBox_dial_1->checkState ()==2&&ui->checkBox_dial_2->checkState ()==0){ui->label_gan_hint_1->show ();ui->label_gan_hint_2->show ();ui->verticalSlider_light->setValue (add);add++;if(add>=7){timer_5->stop ();qDebug()<<"1上升完畢";QMessageBox::information (this,"提示","燈1上升完畢");ui->label_gan_hint_1->hide();ui->label_gan_hint_2->hide ();}}if(ui->checkBox_dial_1->checkState ()==0&&ui->checkBox_dial_2->checkState ()==2){ui->label_gan_hint_1->show ();ui->label_gan_hint_2->show ();ui->verticalSlider_light_2->setValue (bdd);bdd++;if(bdd>=7){timer_8->stop ();qDebug()<<"2上升完畢";QMessageBox::information (this,"提示","燈2上升完畢");ui->label_gan_hint_1->hide();ui->label_gan_hint_2->hide ();}}if(ui->checkBox_dial_1->checkState ()==2&&ui->checkBox_dial_2->checkState ()==2){if(add==bdd){ui->label_gan_hint_1->show ();ui->label_gan_hint_2->show ();ui->verticalSlider_light->setValue (add);ui->verticalSlider_light_2->setValue (bdd);add++;bdd++;if(add==7&&bdd==7){timer_5->stop ();timer_8->stop ();qDebug()<<"兩盞上升完畢";QMessageBox::information (this,"提示","兩盞燈上升完畢");ui->label_gan_hint_1->hide();ui->label_gan_hint_2->hide ();}}else{timer_5->stop ();timer_8->stop ();qDebug()<<"請取消無需升降操作的選項";QMessageBox::information (this,"提示","請取消無需升降操作的選項");ui->label_gan_hint_1->hide();ui->label_gan_hint_2->hide ();}}} void Widget::timer_up ()//燈上升動畫定時器使用 {if(ui->checkBox_dial_1->checkState ()==2&&ui->checkBox_dial_2->checkState ()==0){timer_6->stop ();timer_5->start (1000);}if(ui->checkBox_dial_1->checkState ()==0&&ui->checkBox_dial_2->checkState ()==2){timer_9->stop ();timer_8->start (1000);}if(ui->checkBox_dial_1->checkState ()==2&&ui->checkBox_dial_2->checkState ()==2){timer_6->stop ();timer_5->start (1000);timer_9->stop ();timer_8->start (1000);} }

第一個函數(shù)判斷選中的控制路燈(因為此項目控制的是兩個升降路燈模型);第二個函數(shù)控制路燈升降控制的圖像變換顯示,主要機制還是定時器的使用。(這里下降與上升異曲同工)
路燈燈部轉(zhuǎn)動

void Widget::dial_1()//燈部旋轉(zhuǎn)模塊鏈接設(shè)置 {int max=180;int min=90;int single_sp=15;int single_ver=15;ui->spinBox_3->setMaximum (max);ui->spinBox_3->setMinimum (min);ui->spinBox_5->setRange (90,180);ui->spinBox_3->setSingleStep (single_sp);ui->spinBox_5->setSingleStep (single_sp);ui->spinBox_3->setValue (90);ui->spinBox_5->setValue (90);ui->dial->setSingleStep (single_ver);ui->dial_2->setSingleStep (single_ver);connect (ui->spinBox_3,SIGNAL (valueChanged(int)),ui->dial,SLOT (setValue(int)));connect (ui->dial,SIGNAL (valueChanged(int)),ui->spinBox_3,SLOT (setValue(int)));connect (ui->spinBox_5,SIGNAL (valueChanged(int)),ui->dial_2,SLOT (setValue(int)));connect (ui->dial_2,SIGNAL (valueChanged(int)),ui->spinBox_5,SLOT (setValue(int)));connect (ui->spinBox_3,SIGNAL (valueChanged(int)),this,SLOT (spinBox_hint_1 ()));connect (ui->spinBox_5,SIGNAL (valueChanged(int)),this,SLOT (spinBox_hint_2 ()));// connect (ui->spinBox_3,SIGNAL (valueChanged(int)),this,SLOT (send_lighting()));//connect (ui->dial,SIGNAL (valueChanged(int)),this,SLOT(send_lighting()));// connect (ui->spinBox_5,SIGNAL (valueChanged(int)),this,SLOT (send_lighting()));//connect (ui->dial_2,SIGNAL (valueChanged(int)),this,SLOT(send_lighting()));}void Widget::spinBox_hint_1 () {ui->label_light_hint_1->setText (" 調(diào)節(jié)中");ui->label_light_hint_1->show (); }void Widget::spinBox_hint_2 () {ui->label_light_hint_2->setText (" 調(diào)節(jié)中");ui->label_light_hint_2->show (); }void Widget::dial_hint ()//燈部轉(zhuǎn)動***發(fā)送的變量Z {QString value1;QString value2;value1=ui->spinBox_3->text ();value2=ui->spinBox_5->text ();int value1_int=value1.toInt ();int value2_int=value2.toInt ();value1_int=value1_int-90;value2_int=value2_int-90;value1=QString::number (value1_int);value2=QString::number (value2_int);if(value1_int<=10){value1="0"+value1;}if(value2_int<=10){value2="0"+value2;}timer_7->setSingleShot (true);//設(shè)定定時器7只被觸發(fā)一次if(ui->checkBox_dial_1->checkState ()==0&&ui->checkBox_dial_2->checkState ()==0){qDebug()<<"未被選中";QMessageBox::information (this,"提示","請勾選需要轉(zhuǎn)動的路燈");}if(ui->checkBox_dial_1->checkState ()==2&&ui->checkBox_dial_2->checkState ()==0){chocie="1";Z_1=value1;ui->label_light_hint_1->setText ("正在轉(zhuǎn)動中...");ui->label_light_hint_1->show ();timer_7->start (2*1000);}if(ui->checkBox_dial_2->checkState ()==2&&ui->checkBox_dial_1->checkState ()==0){chocie="2";Z_2=value2;ui->label_light_hint_2->setText ("正在轉(zhuǎn)動中...");ui->label_light_hint_2->show ();timer_7->start (2*1000);}if(ui->checkBox_dial_2->checkState ()==2&&ui->checkBox_dial_1->checkState ()==2){chocie="3";Z_1=value1;Z_2=value2;ui->label_light_hint_1->setText ("正在轉(zhuǎn)動中...");ui->label_light_hint_2->setText ("正在轉(zhuǎn)動中...");ui->label_light_hint_1->show ();ui->label_light_hint_2->show ();timer_7->start (2*1000);}send_datas ();//connect (timer_7,SIGNAL (timeout()),this,SLOT (dial_execute ())); }void Widget::dial_execute ()//轉(zhuǎn)動動畫執(zhí)行 {ui->label_light_hint_1->hide ();ui->label_light_hint_2->hide ();timer_7->stop ();QMessageBox::information (this,"提示","轉(zhuǎn)動完成"); }

同樣是定時器的運用
控制界面如下:

三、數(shù)據(jù)庫

在上位機上設(shè)置有數(shù)據(jù)庫,用于存儲路段的相關(guān)情況目前主要工作。光敏傳感等傳感器將檢測到的數(shù)據(jù)反饋到上位機,上位機將數(shù)據(jù)進行存儲,能夠更加清晰地了解該路段所存在的情況。目前的存儲信息格式為“時間—光照強度—天氣情況——溫度”,用戶從主操作界面點擊進入數(shù)據(jù)庫界面,可對數(shù)據(jù)庫列表數(shù)據(jù)進行更新、數(shù)量設(shè)定等操作。后期我們將新增信息搜索等功能已完善與優(yōu)化數(shù)據(jù)庫系統(tǒng)。
我在以前的博文中提到過數(shù)據(jù)庫的使用,這里就不過多贅述,直接上代碼:

#include "data_storeroom.h" #include "ui_data_storeroom.h"int sum=1440;//默認的存數(shù)據(jù)的條數(shù)data_storeroom::data_storeroom(QWidget *parent) :QWidget(parent),ui(new Ui::data_storeroom) {ui->setupUi(this);this->setMaximumSize (837,592);ui->lineEdit_sum->setEnabled (false);this->setWindowTitle ("數(shù)據(jù)庫");db=QSqlDatabase::addDatabase ("QSQLITE");db.setDatabaseName ("data_lighting.db");bool ok=db.open ();if(!ok){qDebug()<<"數(shù)據(jù)庫打開失敗";}else{qDebug()<<"數(shù)據(jù)庫打開成功";}up_data();//更新數(shù)據(jù)if(setting.value ("sum").toInt ()==0){ui->lineEdit_sum->setText (QString::number (sum));}else{save_setting ();}timer->start (1000);QObject::connect (ui->pushButton_updata,SIGNAL (clicked()),this,SLOT (up_data()));//重塑數(shù)據(jù)模型使之更新QObject::connect (timer,SIGNAL (timeout()),this,SLOT (detection_data())); //數(shù)據(jù)數(shù)量檢測//ui設(shè)定QPalette pa;//定義一個調(diào)色板QPixmap pix;pix=QPixmap("phono/background.jpg").scaled (this->size ());pa.setBrush (this->backgroundRole (),QBrush(pix));this->setPalette (pa);}data_storeroom::~data_storeroom() {delete ui; }void data_storeroom::save_setting ()//保存設(shè)置 {int a;QString A;a=setting.value ("sum").toInt ();A=QString::number (a);ui->lineEdit_sum->setText (A);sum=ui->lineEdit_sum->text ().toInt ();}void data_storeroom::up_data ()//數(shù)據(jù)更新 {int i;QSqlQuery query;qryModel=new QSqlQueryModel(this);theSelection=new QItemSelectionModel(qryModel);//構(gòu)建指向qryModel的選擇模型qryModel->setQuery ("select time,lighting,weather,temperature from light order by time desc");//以倒序排列if(qryModel->lastError ().isValid()){QMessageBox::information (this,"錯誤","數(shù)據(jù)表格查詢失敗\n"+qryModel->lastError ().text (),QMessageBox::Ok,QMessageBox::NoButton);qDebug()<<db.lastError ();}qryModel->setHeaderData (0,Qt::Horizontal,QObject::tr ("時間"));qryModel->setHeaderData (1,Qt::Horizontal,QObject::tr ("光照強度"));qryModel->setHeaderData (2,Qt::Horizontal,QObject::tr ("天氣情況"));qryModel->setHeaderData (3,Qt::Horizontal,QObject::tr ("溫度/℃"));ui->tableView->setModel (qryModel);ui->tableView->setSelectionModel (theSelection);ui->tableView->setAlternatingRowColors (true);//設(shè)置顏色//設(shè)置列寬ui->tableView->setColumnWidth (0,150);//第一列的寬度ui->tableView->setColumnWidth (1,80);ui->tableView->setColumnWidth (2,80);ui->tableView->setColumnWidth (3,100);i=qryModel->rowCount ();//獲取行數(shù)QString n,m;m="條(滿數(shù)%1)";m=m.arg (sum);n=QString::number (i);ui->label_number->setText (n+m);}void data_storeroom::detection_data ()//自動檢測數(shù)據(jù)溢出, //數(shù)據(jù)監(jiān)測是否超過設(shè)定保存值 {int i;QSqlQuery query;i=qryModel->rowCount ();if(i>sum)//數(shù)據(jù)庫只能保存自開啟后sum條的數(shù)據(jù){qDebug()<<"數(shù)據(jù)已到上限執(zhí)行清除命令";QMessageBox::information (this,"提示","數(shù)據(jù)已經(jīng)達到上限執(zhí)行數(shù)據(jù)清除");bool ok_1;query.prepare ("delete from light");ok_1=query.exec ();if(!ok_1){qDebug()<<"數(shù)據(jù)已滿執(zhí)行清空數(shù)據(jù)失敗";}else{up_data();qDebug()<<"數(shù)據(jù)已滿執(zhí)行清空數(shù)據(jù)成功";}}}void data_storeroom::on_pushButton_clear_clicked()//清空數(shù)據(jù) {bool ok_1;QSqlQuery query;query.prepare ("delete from light");ok_1=query.exec ();if(!ok_1){qDebug()<<"數(shù)據(jù)已滿執(zhí)行清空數(shù)據(jù)失敗";}else{up_data();qDebug()<<"數(shù)據(jù)已滿執(zhí)行清空數(shù)據(jù)成功";} }void data_storeroom::on_pushButton_setting_clicked()//更改設(shè)置按鈕 {if(ui->pushButton_setting->text ()=="更改設(shè)置"){ui->lineEdit_sum->setEnabled (true);ui->pushButton_setting->setText ("確認更改");}else{sum=ui->lineEdit_sum->text ().toInt ();//保存數(shù)據(jù)setting.setValue ("sum",sum);QMessageBox::information (this,"提示","更改成功");ui->lineEdit_sum->setEnabled (false);up_data ();ui->pushButton_setting->setText ("更改設(shè)置");} }void data_storeroom::on_pushButton_back02_clicked() {this->close (); }

界面效果:

四、天氣情況顯示

上位機通過聯(lián)網(wǎng)獲取網(wǎng)站,在網(wǎng)站上獲取天氣預(yù)報信息,并解析反饋到上位機,實時更新,方便快捷地了解到當(dāng)?shù)禺?dāng)時的天氣,作為路燈輔助控制手段之一。
天氣顯示,主要是通過聯(lián)網(wǎng)獲取天氣網(wǎng)站的天氣數(shù)據(jù)來實現(xiàn)的,難點是在如何解析獲取的網(wǎng)絡(luò)語言
JSON,各位可以去搜一下,下面附上代碼:

void Widget::receive_weather ()//獲取網(wǎng)站的天氣情況 {//獲取網(wǎng)絡(luò)天氣if(!ui->lineEdit_city->text ().isEmpty ()){QString local_country=ui->lineEdit_city->text ();char quest_array[256]="http://wthrcdn.etouch.cn/weather_mini?city=";QNetworkRequest quest;sprintf (quest_array,"%s%s",quest_array,local_country.toUtf8 ().data ());quest.setUrl (QUrl(quest_array));quest.setHeader (QNetworkRequest::UserAgentHeader,"RT-Thread ART");manager->get (quest);//發(fā)送get網(wǎng)路請求QObject::connect (manager,SIGNAL (finished(QNetworkReply*)),this,SLOT (getting_weather (QNetworkReply*)));}else{QMessageBox::warning (this,"錯誤","請輸入查詢的城市");} }void Widget::judge_weather ()//天氣狀況判斷(顯示對應(yīng)的天氣圖) {if(weather=="陰"){ui->label_weather_map->setPixmap (QPixmap("phono/small_picture/weather/weather_clouds.png"));ui->label_weather_map->setScaledContents (true);}if(weather=="多云"){ui->label_weather_map->setPixmap (QPixmap("phono/small_picture/weather/weather_cloudy.png"));ui->label_weather_map->setScaledContents (true);}if(weather=="晴"){ui->label_weather_map->setPixmap (QPixmap("phono/small_picture/weather/weather_sun.png"));ui->label_weather_map->setScaledContents (true);}if(weather=="小雨"){ui->label_weather_map->setPixmap (QPixmap("phono/small_picture/weather/weather_rain_little.png"));ui->label_weather_map->setScaledContents (true);}if(weather=="中雨"){ui->label_weather_map->setPixmap (QPixmap("phono/small_picture/weather/weather_rain.png"));ui->label_weather_map->setScaledContents (true);}if(weather=="大雨"){ui->label_weather_map->setPixmap (QPixmap("phono/small_picture/weather/weather_rain.png"));ui->label_weather_map->setScaledContents (true);}if(weather=="陣雨"){ui->label_weather_map->setPixmap (QPixmap("phono/small_picture/weather/weather_rain.png"));ui->label_weather_map->setScaledContents (true);}} void Widget::getting_weather (QNetworkReply *reply)//用于解析收到的數(shù)據(jù) {qDebug()<<"數(shù)據(jù)接收到!!!";QString data=reply->readAll ();qDebug()<<data;//將接收到的數(shù)據(jù)顯示出來QJsonParseError err;QJsonDocument json=QJsonDocument::fromJson (data.toUtf8 (),&err);//解析json對象qDebug()<<err.error;if(!json.isNull ()){QJsonObject object=json.object ();if(object.contains ("data")){QJsonValue value=object.value ("data");if(value.isObject ()){QJsonObject object_data=value.toObject ();if(object_data.contains ("forecast")){QJsonValue values=object_data.value ("forecast");if(values.isArray ()){QJsonObject today_weather=values.toArray ().at (0).toObject ();weather=today_weather.value ("type").toString ();//天氣類型QString low=today_weather.value ("low").toString ();QString high=today_weather.value ("high").toString ();temperature=low.mid (low.length ()-3,4)+"~"+high.mid (high.length ()-3,4);//高低溫度顯示ui->label_weather->setText (weather);ui->label_temperature_value->setText (temperature);judge_weather ();}}}}}else{qDebug()<<"沒有接受到數(shù)據(jù)";}reply->deleteLater ();//銷毀請求對象 }

出了這些外,你還需要一些圖標(biāo)才行,我在下面的代碼包中,提供有,本系統(tǒng)會用的圖標(biāo)。
效果圖如下:

他能在聯(lián)網(wǎng)的情況下獲取各大市級城市的天氣情況。輸入自己查詢的地區(qū)名,點擊確認即可。

五、光照強度曲線圖

ZigBee控制光敏傳感器實時采集光照強度,然后將所采集到的數(shù)據(jù)反饋進入上位機,形成曲線圖,直觀地了解路況光照信息,并存入數(shù)據(jù)庫,為優(yōu)化路燈收集事實基礎(chǔ)。
這個部分還是在我以前的博文中提到過,我就不贅述了,直接上代碼:

void Widget::createChart()//創(chuàng)建圖表 {maxsize=31;//設(shè)置實時數(shù)據(jù)儲存的量的上限為31max_x=300;max_y=150;splineSeries->setColor (Qt::red);splineSeries_2->setColor (Qt::blue);QChart *chart=new QChart();chart->addSeries (splineSeries);chart->addSeries (splineSeries_2);splineSeries->setName ("燈1檢測到的光照強度");splineSeries_2->setName ("燈2檢測的光照強度");chart->legend ()->setVisible (true);//顯示圖例chart->legend ()->setAlignment (Qt::AlignTop);//圖例顯示在上方chart->setTitle ("數(shù)據(jù)動態(tài)曲線");chart->createDefaultAxes ();//根據(jù)級數(shù)添加軸(已添加進入的級數(shù))chart->axisX ()->setRange (0,max_x);chart->axisY ()->setRange (0,max_y);chart->axisX ()->setTitleText ("時間X軸單位/0.1s))");chart->axisY ()->setTitleText ("光照強度");ui->ChartView->setChart (chart);ui->ChartView->setRenderHint (QPainter::Antialiasing);}void Widget::receiveChart (int light, int light_2)//動態(tài)圖表繪制 {list<<light;list_2<<light_2;while (list.size ()>maxsize&&list_2.size ()>maxsize){list.removeFirst ();list_2.removeFirst ();}if(isVisible ()){splineSeries->clear ();splineSeries_2->clear();for(int p=0;p<list.size ();p++){splineSeries->append (10+p*10,list.at (p));//at()用于訪問容器,也可用[]splineSeries_2->append (10+p*10,list_2.at (p));}}}

現(xiàn)在附上整體界面設(shè)計圖(說實話,我也覺得丑,原諒我只是個工科生。。。。)


好了,主要的部分我已經(jīng)發(fā)出來了,如果需要詳細了解的話,就請下載下方的鏈接文件:
智能路燈Qt操作界面代碼

總結(jié)

以上是生活随笔為你收集整理的基于Zigbee的智能路灯控制系统的Qt操作界面的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。