runchwiget.cpp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. #include "runchwiget.h"
  2. #include "ui_runchwiget.h"
  3. #include "pdu_ctrl.h"
  4. #include <QScroller>
  5. RunChWiget::RunChWiget(QWidget *parent) :
  6. QWidget(parent),
  7. ui(new Ui::RunChWiget),
  8. SaveIndex(0)
  9. {
  10. ui->setupUi(this);
  11. //setRunCh();
  12. }
  13. RunChWiget::~RunChWiget()
  14. {
  15. delete ui;
  16. }
  17. void RunChWiget::setRunCh()
  18. {
  19. GlobalPowerCtrlBoard* pAllChData=nullptr;
  20. int nSize=pdu_Ctrl::instance()->getPowerBoard(pAllChData);
  21. if(!pAllChData||nSize==SaveIndex)
  22. {
  23. return;
  24. }
  25. ClearCH();
  26. SaveIndex=pAllChData->product_number;
  27. int nChId=1;
  28. for (int nIndex=0;nIndex<nSize;nIndex++)
  29. {
  30. for(int nSubIndex=0;nSubIndex<pAllChData[nIndex].product_number;nSubIndex++)
  31. {
  32. int nChIndex=nChId++;
  33. ch_Widget* pNewCH=new ch_Widget(this);
  34. pNewCH->setDataCHP(nChIndex,&(pAllChData[nIndex]._PowerInfo[nSubIndex]));
  35. AddWidget(pNewCH);
  36. pNewCH->show();
  37. }
  38. }
  39. }
  40. void RunChWiget::UpdateAllCh()
  41. {
  42. setRunCh();
  43. for(auto var : m_vecChWidget)
  44. {
  45. if(var)
  46. {
  47. var->UpdateData();
  48. }
  49. }
  50. update();
  51. }
  52. void RunChWiget::ClearCH()
  53. {
  54. for(auto var : m_vecChWidget)
  55. {
  56. if(var)
  57. {
  58. var->hide();
  59. delete var;
  60. }
  61. var=nullptr;
  62. }
  63. m_vecChWidget.clear();
  64. }
  65. void RunChWiget::AddWidget(ch_Widget *pCHWidget)
  66. {
  67. int nSize=m_vecChWidget.size();
  68. ui->gridLayout->addWidget(pCHWidget,nSize/2,nSize%2);
  69. m_vecChWidget.push_back(pCHWidget);
  70. }
  71. void RunChWiget::initScrollArea()
  72. {
  73. // 启用触控手势
  74. QScroller::grabGesture(ui->scrollArea->viewport(), QScroller::TouchGesture);
  75. // 获取滚动控制器
  76. QScroller* scroller = QScroller::scroller(ui->scrollArea);
  77. // 配置滚动参数
  78. QScrollerProperties prop = scroller->scrollerProperties();
  79. // 设置滚动摩擦系数(值越小惯性越长)
  80. prop.setScrollMetric(QScrollerProperties::DragVelocitySmoothingFactor, 0.6);
  81. prop.setScrollMetric(QScrollerProperties::MinimumVelocity, 0.0);
  82. prop.setScrollMetric(QScrollerProperties::MaximumVelocity, 0.5);
  83. prop.setScrollMetric(QScrollerProperties::SnapPositionRatio, 0.2);
  84. prop.setScrollMetric(QScrollerProperties::DragStartDistance, 0.001);
  85. scroller->setScrollerProperties(prop);
  86. // 设置视口必须接受触摸事件
  87. ui->scrollArea->viewport()->setAttribute(Qt::WA_AcceptTouchEvents);
  88. }