CustomCheckBox.cpp 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #include "CustomCheckBox.h"
  2. #include <QDebug>
  3. CustomCheckBox::CustomCheckBox(QWidget* parent)
  4. : QCheckBox(parent)
  5. {
  6. // 连接 checked 信号,当勾选状态改变时执行 setEditColor
  7. connect(this, &QCheckBox::toggled, this, [=](bool checked) {
  8. m_valueChangeFlag = true; // 标记值已更改
  9. });
  10. // 连接 editingFinished 信号来处理编辑完成事件
  11. connect(this, &QCheckBox::toggled, this, [=]() {
  12. if (m_valueChangeFlag) {
  13. emit editDone(); // 发出编辑完成信号
  14. setEditColor(); // 改变颜色
  15. m_valueChangeFlag = false; // 重置标志
  16. }
  17. });
  18. }
  19. CustomCheckBox::~CustomCheckBox() {}
  20. void CustomCheckBox::setEditColor()
  21. {
  22. if (this->isChecked() != m_oldVal) {
  23. setStyleSheet("color: red;"); // 修改文字颜色为红色
  24. // setStyleSheet("background-color: red"); // 可改为修改背景颜色
  25. }
  26. else {
  27. setStyleSheet(""); // 恢复默认样式
  28. }
  29. }
  30. void CustomCheckBox::setSavedColor()
  31. {
  32. setStyleSheet(""); // 恢复为默认样式
  33. m_oldVal = this->isChecked(); // 保存当前状态
  34. m_countClicked = 0;
  35. }
  36. void CustomCheckBox::setChecked(bool checked)
  37. {
  38. if (m_countClicked == 0) m_oldVal = checked; // 首次设置时,记录原始值
  39. m_countClicked++;
  40. QCheckBox::setChecked(checked); // 调用父类的 setChecked
  41. }