MediatorDisplay.cpp 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. #include "MediatorDisplay.h"
  2. //这里如果直接让左右互相同步,互相影响,可能导致混乱。需要一个中间调停者模式,作为中间人去控制同步消息
  3. //中介者模式意图:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
  4. //主要解决:对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同时若一个对象发生改变,我们也需要跟踪与之相关联的对象,同时做出相应的处理。
  5. //之前不使用该模式时,左右显示同步互相交互,时而发生消息混乱
  6. MediatorDisplay::MediatorDisplay():QObject(nullptr)
  7. {
  8. m_leftLineNum = 0;
  9. m_rightLineNum = 0;
  10. m_leftScrollValue = 0;
  11. m_rightScrollValue = 0;
  12. }
  13. MediatorDisplay::~MediatorDisplay()
  14. {
  15. }
  16. void MediatorDisplay::setLeftNum(int value)
  17. {
  18. m_leftLineNum = value;
  19. if (m_leftLineNum != m_rightLineNum)
  20. {
  21. emit syncCurLineNum(0);
  22. }
  23. }
  24. void MediatorDisplay::setRightNum(int value)
  25. {
  26. m_rightLineNum = value;
  27. if (m_leftLineNum != m_rightLineNum)
  28. {
  29. emit syncCurLineNum(1);
  30. }
  31. }
  32. int MediatorDisplay::getLeftNum()
  33. {
  34. return m_leftLineNum;
  35. }
  36. int MediatorDisplay::getRightNum()
  37. {
  38. return m_rightLineNum;
  39. }
  40. void MediatorDisplay::setLeftScrollValue(int value)
  41. {
  42. if (m_leftScrollValue != value)
  43. {
  44. m_leftScrollValue = value;
  45. }
  46. //如果左右不相等,则推动对方去同步
  47. if (m_leftScrollValue != m_rightScrollValue)
  48. {
  49. emit syncCurScrollValue(0);
  50. }
  51. }
  52. void MediatorDisplay::setRightScrollValue(int value)
  53. {
  54. if (m_rightScrollValue != value)
  55. {
  56. m_rightScrollValue = value;
  57. }
  58. if (m_leftScrollValue != m_rightScrollValue)
  59. {
  60. emit syncCurScrollValue(1);
  61. }
  62. }
  63. int MediatorDisplay::getLeftScrollValue()
  64. {
  65. return m_leftScrollValue;
  66. }
  67. int MediatorDisplay::getRightScrollValue()
  68. {
  69. return m_rightScrollValue;
  70. }
  71. void MediatorDisplay::setLeftScrollXValue(int value)
  72. {
  73. if (m_leftScrollXValue != value)
  74. {
  75. m_leftScrollXValue = value;
  76. }
  77. //如果左右不相等,则推动对方去同步
  78. if (m_leftScrollXValue != m_rightScrollXValue)
  79. {
  80. emit syncCurScrollXValue(0);
  81. }
  82. }
  83. void MediatorDisplay::setRightScrollXValue(int value)
  84. {
  85. if (m_rightScrollXValue != value)
  86. {
  87. m_rightScrollXValue = value;
  88. }
  89. if (m_leftScrollXValue != m_rightScrollXValue)
  90. {
  91. emit syncCurScrollXValue(1);
  92. }
  93. }
  94. int MediatorDisplay::getLeftScrollXValue()
  95. {
  96. return m_leftScrollXValue;
  97. }
  98. int MediatorDisplay::getRightScrollXValue()
  99. {
  100. return m_rightScrollXValue;
  101. }