runlogwidget.cpp 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  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. QTableWidgetItem *item3 = new QTableWidgetItem(strMSG);
  51. ui->tableWidget->setItem(row, 3, item3);
  52. }
  53. void RunLogWidget::ClearList()
  54. {
  55. ui->tableWidget->clearContents();
  56. ui->tableWidget->setRowCount(0);
  57. }
  58. void RunLogWidget::calculateTotalPages()
  59. {
  60. QSqlQuery query(pdu_Ctrl::instance()->getDB());
  61. QString strExec="SELECT COUNT(*) FROM Table_AlarmManage";
  62. if (query.exec(strExec) && query.next()) {
  63. int totalRecords = query.value(0).toInt();
  64. totalPages = (totalRecords + perPage - 1) / perPage;
  65. }
  66. }
  67. void RunLogWidget::loadPage(int page)
  68. {
  69. QSqlQuery query(pdu_Ctrl::instance()->getDB());
  70. query.prepare(
  71. "SELECT alarmNumber, alarmDate, alarmType, product_id, alarmContent "
  72. "FROM Table_AlarmManage "
  73. "ORDER BY alarmDate DESC "
  74. "LIMIT :limit OFFSET :offset"
  75. );
  76. query.bindValue(":limit", perPage);
  77. query.bindValue(":offset", (page - 1) * perPage);
  78. if (!query.exec()) {
  79. //QMessageBox::warning(this, "Query Error", query.lastError().text());
  80. return;
  81. }
  82. ClearList();
  83. while (query.next()) {
  84. int totalRecords = query.value(0).toInt();
  85. //int totalRecords1 = query.value(1).toInt();
  86. int totalRecords2 = query.value(2).toInt();
  87. QString totalRecords3 = query.value(1).toString();
  88. QString totalRecords4 = query.value(4).toString();
  89. AddRowData(totalRecords,totalRecords2,totalRecords3,totalRecords4);
  90. }
  91. ui->tableWidget->resizeColumnsToContents();
  92. ui->labelPage->setText(QString("Page: %1/%2").arg(page).arg(totalPages));
  93. }
  94. void RunLogWidget::updateButtons()
  95. {
  96. ui->prevButton->setEnabled(currentPage > 1);
  97. ui->nextButton->setEnabled(currentPage < totalPages);
  98. }
  99. void RunLogWidget::slot_upPage()
  100. {
  101. if (currentPage > 1) {
  102. loadPage(--currentPage);
  103. updateButtons();
  104. }
  105. }
  106. void RunLogWidget::slot_downPage()
  107. {
  108. if (currentPage < totalPages) {
  109. loadPage(++currentPage);
  110. updateButtons();
  111. }
  112. }