runlogwidget.cpp 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. #include "runlogwidget.h"
  2. #include "ui_runlogwidget.h"
  3. #include "pdu_ctrl.h"
  4. #include <QScroller>
  5. RunLogWidget::RunLogWidget(QWidget *parent) :
  6. QWidget(parent),
  7. ui(new Ui::RunLogWidget)
  8. {
  9. ui->setupUi(this);
  10. InitUI();
  11. currentPage=1;
  12. }
  13. RunLogWidget::~RunLogWidget()
  14. {
  15. delete ui;
  16. }
  17. void RunLogWidget::UpdateLog()
  18. {
  19. calculateTotalPages();
  20. loadPage(currentPage);
  21. }
  22. void RunLogWidget::InitUI()
  23. {
  24. connect(ui->prevButton,SIGNAL(clicked()),this,SLOT(slot_upPage()));
  25. connect(ui->nextButton,SIGNAL(clicked()),this,SLOT(slot_downPage()));
  26. QStringList headers = {"序号", "时间", "类型","记录"};
  27. ui->tableWidget->setColumnCount(4);
  28. ui->tableWidget->setHorizontalHeaderLabels(headers);
  29. // 设置自动调整列宽
  30. ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
  31. //ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
  32. ui->tableWidget->verticalHeader()->setVisible(false);
  33. ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
  34. QScroller::grabGesture(ui->tableWidget->viewport(), QScroller::TouchGesture);
  35. QScrollerProperties properties = QScroller::scroller(ui->tableWidget)->scrollerProperties();
  36. properties.setScrollMetric(QScrollerProperties::DragVelocitySmoothingFactor, 0.6); // 惯性系数
  37. properties.setScrollMetric(QScrollerProperties::SnapPositionRatio, 0.2); // 弹性效果
  38. ui->tableWidget->viewport()->setAttribute(Qt::WA_AcceptTouchEvents); // 启用触控事件
  39. }
  40. void RunLogWidget::AddRowData(int nIndex, int nType, QString nTime, QString strMSG)
  41. {
  42. int row = ui->tableWidget->rowCount();
  43. ui->tableWidget->insertRow(row);
  44. QTableWidgetItem *item = new QTableWidgetItem(QString::number(nIndex));
  45. ui->tableWidget->setItem(row, 0, item);
  46. QTableWidgetItem *item1 = new QTableWidgetItem(nTime);
  47. ui->tableWidget->setItem(row, 1, item1);
  48. QTableWidgetItem *item2 = new QTableWidgetItem(QString::number(nType));
  49. ui->tableWidget->setItem(row, 2, item2);
  50. QString strData=strMSG;
  51. strData.replace("$","");
  52. strData.replace("|","");
  53. QTableWidgetItem *item3 = new QTableWidgetItem(strData);
  54. ui->tableWidget->setItem(row, 3, item3);
  55. }
  56. void RunLogWidget::ClearList()
  57. {
  58. ui->tableWidget->clearContents();
  59. ui->tableWidget->setRowCount(0);
  60. }
  61. void RunLogWidget::calculateTotalPages()
  62. {
  63. QSqlQuery query(pdu_Ctrl::instance()->getDB());
  64. QString strExec="SELECT COUNT(*) FROM Table_AlarmManage";
  65. if (query.exec(strExec) && query.next()) {
  66. int totalRecords = query.value(0).toInt();
  67. totalPages = (totalRecords + perPage - 1) / perPage;
  68. }
  69. }
  70. void RunLogWidget::loadPage(int page)
  71. {
  72. QSqlQuery query(pdu_Ctrl::instance()->getDB());
  73. query.prepare(
  74. "SELECT alarmNumber, alarmDate, alarmType, product_id, alarmContent "
  75. "FROM Table_AlarmManage "
  76. "ORDER BY alarmDate DESC "
  77. "LIMIT :limit OFFSET :offset"
  78. );
  79. query.bindValue(":limit", perPage);
  80. query.bindValue(":offset", (page - 1) * perPage);
  81. if (!query.exec()) {
  82. //QMessageBox::warning(this, "Query Error", query.lastError().text());
  83. return;
  84. }
  85. ClearList();
  86. while (query.next()) {
  87. int totalRecords = query.value(0).toInt();
  88. //int totalRecords1 = query.value(1).toInt();
  89. int totalRecords2 = query.value(2).toInt();
  90. QString totalRecords3 = query.value(1).toString();
  91. QString totalRecords4 = query.value(4).toString();
  92. AddRowData(totalRecords,totalRecords2,totalRecords3,totalRecords4);
  93. }
  94. ui->tableWidget->resizeColumnsToContents();
  95. ui->labelPage->setText(QString("Page: %1/%2").arg(page).arg(totalPages));
  96. }
  97. void RunLogWidget::updateButtons()
  98. {
  99. ui->prevButton->setEnabled(currentPage > 1);
  100. ui->nextButton->setEnabled(currentPage < totalPages);
  101. }
  102. void RunLogWidget::slot_upPage()
  103. {
  104. if (currentPage > 1) {
  105. loadPage(--currentPage);
  106. updateButtons();
  107. }
  108. }
  109. void RunLogWidget::slot_downPage()
  110. {
  111. if (currentPage < totalPages) {
  112. loadPage(++currentPage);
  113. updateButtons();
  114. }
  115. }