Qt 自定义开关组件与智能灯控制 - SwitchForm 改进与Lights 优化
{ "title": "#ifndef SWITCHFORM_H\n#define SWITCHFORM_H\n\n#include cpp\nvoid SwitchForm::mousePressEvent(QMouseEvent *ev)\n{\n Q_UNUSED(ev)\n\n setChecked(!m_checked); // 更新状态\n emit statusChanged(m_checked);\n\n // 计算步长\n m_step = qAbs(m_endX - m_startX) / 10; // 修改步长的计算方式\n\n // 判断是否使用动画\n if (m_animation) {\n m_timer->start();\n } else {\n m_startX = m_endX;\n update();\n }\n}\n\n\n// 另外,Lights类中的switchButton_status函数应该是一个槽函数,需要使用Q_SLOT宏进行声明。修改如下:\n\ncpp\nclass Lights : public QWidget\n{\n Q_OBJECT\n\npublic:\n // ...\n\npublic slots:\n bool switchButton_status(bool checked);\n\n // ...\n};\n\n\n// 然后在cpp文件中连接信号和槽函数:\n\ncpp\nconnect(ui->SwitchStatus, SIGNAL(statusChanged(bool)), this, SLOT(switchButton_status(bool)));\n\n\n// 最后,在Lights类的构造函数中,将连接信号和槽函数的方式修改为新的语法:\n\ncpp\nconnect(ui->Finished, &QPushButton::clicked, this, [=]{\n if(flag)\n {\n QString brighteness = QString::number(ui->ctrlform->getValue());\n qDebug()<<brighteness<<userid;\n updateSmartHomeStatus(userid,QString("智能灯"),QString("开启"),brighteness);\n }else\n {\n qDebug() << \"智能灯未打开!\";\n updateSmartHomeStatus(userid,QString("智能灯"),QString("关闭"),QString("0"));\n }\n});\n\n\n// 这样,在SwitchStatus状态改变时,会自动调用switchButton_status函数来更新ctrlform的状态。\n\n// 问题出在SwitchForm的mousePressEvent函数中,需要将m_checked的值传递给SwitchForm的setChecked函数来更新状态。修改如下:\n\ncpp\nvoid SwitchForm::mousePressEvent(QMouseEvent *ev)\n{\n Q_UNUSED(ev)\n\n setChecked(!m_checked); // 更新状态\n emit statusChanged(m_checked);\n\n // 计算步长\n m_step = qAbs(m_endX - m_startX) / 10; // 修改步长的计算方式\n\n // 判断是否使用动画\n if (m_animation) {\n m_timer->start();\n } else {\n m_startX = m_endX;\n update();\n }\n}\n\n\n// 另外,Lights类中的switchButton_status函数应该是一个槽函数,需要使用Q_SLOT宏进行声明。修改如下:\n\ncpp\nclass Lights : public QWidget\n{\n Q_OBJECT\n\npublic:\n // ...\n\npublic slots:\n bool switchButton_status(bool checked);\n\n // ...\n};\n\n\n// 然后在cpp文件中连接信号和槽函数:\n\ncpp\nconnect(ui->SwitchStatus, SIGNAL(statusChanged(bool)), this, SLOT(switchButton_status(bool)));\n\n\n// 最后,在Lights类的构造函数中,将连接信号和槽函数的方式修改为新的语法:\n\ncpp\nconnect(ui->Finished, &QPushButton::clicked, this, [=]{\n if(flag)\n {\n QString brighteness = QString::number(ui->ctrlform->getValue());\n qDebug()<<brighteness<<userid;\n updateSmartHomeStatus(userid,QString("智能灯"),QString("开启"),brighteness);\n }else\n {\n qDebug() << \"智能灯未打开!\";\n updateSmartHomeStatus(userid,QString("智能灯"),QString("关闭"),QString("0"));\n }\n});\n\n\n// 这样,在SwitchStatus状态改变时,会自动调用switchButton_status函数来更新ctrlform的状态。\n
原文地址: http://www.cveoy.top/t/topic/fATw 著作权归作者所有。请勿转载和采集!