一 環(huán)境范圍設(shè)置
(1)界面添加新控件
在mainwindow.ui 添加控件:
控件的類型 |
文本內(nèi)容 |
對(duì)象名(唯一) |
是否有槽函數(shù) |
QLabel |
<溫度< |
lable_隨意 |
否 |
QLabel |
<濕度< |
lable_隨意 |
否 |
QLabel |
<光照度< |
lable_隨意 |
否 |
QPushButton |
更新范圍 |
PushButton_range |
是 clicked() |
控件的類型 |
當(dāng)前值 |
最大值 |
最小值 |
對(duì)象名(唯一) |
是否有槽函數(shù) |
QSpinBox |
0 |
99 |
-20 |
spinBox_temMIN |
否 |
QSpinBox |
50 |
100 |
-19 |
spinBox_temMAX |
否 |
QSpinBox |
0 |
99 |
0 |
spinBox_humMIN |
否 |
QSpinBox |
50 |
100 |
1 |
spinBox_humMAX |
否 |
QSpinBox |
0 |
3999 |
0 |
spinBox_illMIN |
否 |
QSpinBox |
1000 |
4000 |
1 |
spinBox_illMAX |
否 |
(2)實(shí)現(xiàn)”更新范圍”槽函數(shù)
在mainwindow.h 添加:
#include "daosingleton.h"? // range-1? 單例模式類的頭文件
//在public: 下面添加
??? void setProgressBarRange(RangeEntity &e);//設(shè)置進(jìn)度條的范圍
在mainwindow.cpp 添加槽函數(shù) :
//更新范圍按鈕 槽函數(shù)
void MainWindow::on_pushButton_range_clicked()
{
??? //(a) 從界面上獲得新的范圍range
??? RangeEntity range;
??? range.temMAX = ui->spinBox_temMAX->value();
??? range.temMIN = ui->spinBox_temMIN->value();
??? range.humMAX = ui->spinBox_humMAX->value();
??? range.humMIN = ui->spinBox_humMIN->value();
??? range.illMAX = ui->spinBox_illMAX->value();
??? range.illMIN = ui->spinBox_illMIN->value();
??? //range-3? 修改當(dāng)前房間的環(huán)境范圍? -- 數(shù)據(jù)庫(kù)
??? bool ok = DaoSingleton::getInstance()->getDaoUser()->updateRange(homeNo, range);
??? if(ok){
??????? ui->textBrowser->append("更新環(huán)境范圍成功");
??????? setProgressBarRange(range); //設(shè)置進(jìn)度的最大值+最小值
??? }else
??????? ui->textBrowser->append("更新環(huán)境范圍失敗");
}
//設(shè)置進(jìn)度的范圍(最大值+最小值)
void MainWindow::setProgressBarRange(RangeEntity &e)
{
??? if(ui->progressBar_tem->value() >= e.temMIN
??????????? && ui->progressBar_tem->value() <= e.temMAX){
??????? ui->progressBar_tem->setMinimum(e.temMIN);
??????? ui->progressBar_tem->setMaximum(e.temMAX);
??? }else{
??????? ui->textBrowser->append("溫度進(jìn)度條設(shè)置失敗,原因:當(dāng)前數(shù)據(jù)超出設(shè)置范圍");
??? }
??? if(ui->progressBar_hum->value() >= e.humMIN
??????????? && ui->progressBar_hum->value() <= e.humMAX){
??????? ui->progressBar_hum->setMinimum(e.humMIN);
??????? ui->progressBar_hum->setMaximum(e.humMAX);
??? }else{
??????? ui->textBrowser->append("濕度進(jìn)度條設(shè)置失敗,原因:當(dāng)前數(shù)據(jù)超出設(shè)置范圍");
??? }
??? if(ui->progressBar_ill->value() >= e.illMIN
??????????? && ui->progressBar_ill->value() <= e.illMAX){
??????? ui->progressBar_ill->setMinimum(e.illMIN);
??????? ui->progressBar_ill->setMaximum(e.illMAX);
??? }else{
??????? ui->textBrowser->append("光照強(qiáng)度進(jìn)度條設(shè)置失敗,原因:當(dāng)前數(shù)據(jù)超出設(shè)置范圍");
??? }
}
(3)修改房間編號(hào)槽函數(shù)
在mainwindow.cpp 添加:
//房間號(hào) 修改/切換房間 對(duì)應(yīng)的槽函數(shù)???????????????????????????? arg1修改后的值
void MainWindow::on_comboBox_homeno_currentTextChanged(const QString &arg1)
{
??? homeNo = arg1.toInt();? //新的房間號(hào)
??? ui->textBrowser->setText("您已進(jìn)入新的房間:");
??? //range-2? 查看新房間的環(huán)境的范圍? -- 數(shù)據(jù)庫(kù)
??? RangeEntity range; // 存儲(chǔ)查找到的范圍
??? bool ok = DaoSingleton::getInstance()->getDaoUser()->selectRange(homeNo, range);
??? if(ok)
??? {??? // 將查找到的范圍顯示到界面上
??????? ui->spinBox_temMAX->setValue(range.temMAX);
??????? ui->spinBox_temMIN->setValue(range.temMIN);
??????? ui->spinBox_humMAX->setValue(range.humMAX);
??????? ui->spinBox_humMIN->setValue(range.humMIN);
??????? ui->spinBox_illMAX->setValue(range.illMAX);
??????? ui->spinBox_illMIN->setValue(range.illMIN);
??????? setProgressBarRange(range); //設(shè)置進(jìn)度的最大值+最小值
??? }
}
二 優(yōu)化
(1)代碼優(yōu)化
?在mainwindow.cpp中對(duì)代碼進(jìn)行優(yōu)化1--5:
? //在構(gòu)造函數(shù)中添加
? on_comboBox_homeno_currentTextChanged("1");? //優(yōu)化-1 默認(rèn) 調(diào)用一次切換到1號(hào)房間
? on_pushButton_update_clicked();????????????? //優(yōu)化-1 默認(rèn) 刷新一次串口
//在on_comboBox_homeno_currentTextChanged()函數(shù)中添加
??? ui->textBrowser->setText("您已進(jìn)入新的房間:"); // 優(yōu)化-2 使用說明
??? ui->textBrowser->append("使用說明:1. 將zigbee連接到電腦串口,并上電,等待與Cortex-M0板連通(現(xiàn)象:小燈3個(gè)亮變?yōu)?個(gè)亮);");
??? ui->textBrowser->append("使用說明:2. 點(diǎn)擊'刷新串口'-選擇zigbee的串口-點(diǎn)擊'打開串口'; ");
??? ui->textBrowser->append("使用說明:3. 串口打開成功后, 自動(dòng)啟動(dòng)定時(shí)器,每隔2s采集一次環(huán)境數(shù)據(jù); ");
??? ui->textBrowser->append("使用說明:4. 串口打開成功后, 點(diǎn)擊左邊的控制按鈕,遠(yuǎn)程控制Cortex-M0上的設(shè)備; ");
??? ui->textBrowser->append("使用說明:5. 在界面的下方,可以修改此房間的環(huán)境范圍; ");
??? ui->textBrowser->append("使用說明:6. 點(diǎn)擊 房間號(hào) 后面的控件, 切換到其他房間。");
?
//在saveHomeEnv()函數(shù)中添加
?????? // 優(yōu)化-3? 新的房間上線 ,將新的房間號(hào)插入到comboBox_homeno控件中
??????? int index = ui->comboBox_homeno->findText( QString("%1").arg(e.homeno) );
??????? if(index < 0) // 新的房間號(hào)
??????? {
??????????? ui->comboBox_homeno->addItem( QString("%1").arg(e.homeno) ); //插入到控件中
??????? }
?
//在on_pushButton_update_clicked()函數(shù)中添加
??? ui->pushButton_open->setEnabled(false); // 優(yōu)化-4? 不能點(diǎn)擊
? ? ui->pushButton_open->setEnabled(true); // 優(yōu)化-4? 能點(diǎn)擊
?
//在timerEvent()函數(shù)中添加
??? else?? //優(yōu)化-5
??? {
??????? ui->textBrowser->append("zigbee接收:失敗,原因:請(qǐng)用戶檢查zigbee是否與Cortex-M0連通,或者等一會(huì);");
??? }
(2)界面布局和背景圖片
第一個(gè)界面Login : 布局居中
第一個(gè)界面Login : 背景圖片
?
第二個(gè)界面MainWindow : 背景圖片
第二個(gè)界面MainWindow : 窗口大小固定
三 運(yùn)行測(cè)試
(1)注冊(cè)功能測(cè)試
(2)登錄功能測(cè)試
(3)串口功能測(cè)試——接收環(huán)境信息
(4)串口功能測(cè)試——發(fā)送控制命令
(5)更新環(huán)境范圍測(cè)試
(6)切換房間
文章來源:http://www.zghlxwxcb.cn/news/detail-404927.html
(7)關(guān)閉串口
文章來源地址http://www.zghlxwxcb.cn/news/detail-404927.html
到了這里,關(guān)于智能家居系統(tǒng) QT的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!