空调设置界面开发 - Qt 代码示例
#include"aircondition.h"\n#include"ui_aircondition.h"\n#include"switchform.h"\n#include"lcdform.h"\n#include"sqlite.h"\n#include<QSqlQuery>\n#include<QSqlError>\n#include<QDoubleSpinBox>\n#include<QTimer>\n#include<QDebug>\n\nAirCondition::AirCondition(int userid, QWidget parent) :\n QWidget(parent),\n ui(new Ui::AirCondition),\n userid(userid),\n m_loadLastStatus(true),\n m_connectionsEstablished(false)\n{\n ui->setupUi(this);\n airConditionWidget();\n m_updateTimer = new QTimer(this);\n m_updateTimer->setInterval(500); // 设置定时器间隔为0.5秒\n connect(m_updateTimer, &QTimer::timeout, this, &AirCondition::updateDatabase);\n // 加载上次更改的状态\n loadLastStatus();\n}\n\nAirCondition::~AirCondition()\n{\n delete ui;\n}\n\nvoid AirCondition::airConditionWidget()\n{\n setWindowTitle("空调设置");\n // 设置ui组件背景\n setAutoFillBackground(true);\n QPalette palette = this->palette();\n QPixmap pixmap(":/user/image/image/aircondition.jpg");\n palette.setBrush(QPalette::Window, QBrush(pixmap));\n setPalette(palette);\n setFixedSize(600, 400);\n}\n\nvoid AirCondition::switchButton_status()\n{\n // 判断是否是用户操作\n if (QObject::sender() == ui->SwitchStatus) {\n // 更新状态到数据库\n if (ui->SwitchStatus->checked()) {\n\n ui->temperature->findChild<QDoubleSpinBox>("doubleSpinBox")->setEnabled(true);\n ui->temperature->setValue(lasttemp.toDouble());\n\n } else {\n lasttemp = getLastTemperature(this->userid);\n ui->temperature->setValue(0);\n ui->temperature->findChild<QDoubleSpinBox*>("doubleSpinBox")->setEnabled(false);\n }\n // 重启定时器\n m_updateTimer->start();\n }\n\n}\n\nvoid AirCondition::temperature_changed()\n{\n // 判断是否是用户操作\n if (QObject::sender() == ui->temperature->findChild<QDoubleSpinBox*>("doubleSpinBox")) {\n // 重启定时器\n m_updateTimer->start();\n }\n}\n\nvoid AirCondition::loadLastStatus()\n{\n if (!m_loadLastStatus) { // 判断是否加载上一次的信息\n return;\n }\n\n QString state = getLastState(this->userid);\n QString temp = getLastTemperature(this->userid);\n\n if (state == "开启") {\n ui->SwitchStatus->setChecked(true);\n ui->temperature->setValue(temp.toDouble());\n } else {\n ui->SwitchStatus->setChecked(false);\n ui->temperature->setValue(0);\n ui->temperature->findChild<QDoubleSpinBox*>("doubleSpinBox")->setEnabled(false);\n }\n\n m_loadLastStatus = false; // 加载完毕后将标志位设置为false,避免重复加载\n if (m_connectionsEstablished) {\n return; // 如果信号槽连接已建立,则直接返回\n }\n\n // 建立信号槽连接\n connect(ui->SwitchStatus, &SwitchForm::statusChanged, this, &AirCondition::switchButton_status);\n connect(ui->temperature->findChild<QDoubleSpinBox*>("doubleSpinBox"), QOverload
原文地址: https://www.cveoy.top/t/topic/qmkM 著作权归作者所有。请勿转载和采集!