完成page control,完成数据的翻页功能
parent
a920ce5b41
commit
246153fc8f
|
@ -13,9 +13,9 @@ DataFetcher::~DataFetcher()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DataFetcher::Fetch(TableData& tbl_data)
|
bool DataFetcher::Fetch(TableData& tbl_data,int fetch_rows)
|
||||||
{
|
{
|
||||||
int rows = MysqlUtils::getInstance()->RetrieveTableData(tbl_data);
|
int rows = MysqlUtils::getInstance()->RetrieveTableData(tbl_data,fetch_rows);
|
||||||
if (rows < 0)
|
if (rows < 0)
|
||||||
{
|
{
|
||||||
hloge("Failed to retrieve signal data");
|
hloge("Failed to retrieve signal data");
|
||||||
|
|
|
@ -12,7 +12,7 @@ public:
|
||||||
virtual ~DataFetcher();
|
virtual ~DataFetcher();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
virtual bool Fetch(TableData& tbl_data);
|
virtual bool Fetch(TableData& tbl_data,int fetch_rows = 1000);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
int VerifyStatus();
|
int VerifyStatus();
|
||||||
|
|
|
@ -12,6 +12,9 @@
|
||||||
#include "globalparameters.h"
|
#include "globalparameters.h"
|
||||||
#include "mytablemodel.h"
|
#include "mytablemodel.h"
|
||||||
|
|
||||||
|
#define PAGES_FORMAT_STRING ("Total %1 Pages, Current No.%2 Page")
|
||||||
|
#define PER_PAGE_SIZE (30)
|
||||||
|
|
||||||
DevicePropertyPage::DevicePropertyPage(QWidget *parent) :
|
DevicePropertyPage::DevicePropertyPage(QWidget *parent) :
|
||||||
QWidget(parent),m_pTableView(nullptr),m_pButton(nullptr)
|
QWidget(parent),m_pTableView(nullptr),m_pButton(nullptr)
|
||||||
{
|
{
|
||||||
|
@ -113,6 +116,22 @@ void DevicePropertyPage::InitializeTable()
|
||||||
m_pTableView = new QTableView(this);
|
m_pTableView = new QTableView(this);
|
||||||
m_pButton = new QPushButton(tr("Refresh"), this);
|
m_pButton = new QPushButton(tr("Refresh"), this);
|
||||||
|
|
||||||
|
m_pFirstButton = new QPushButton(tr("First"), this);
|
||||||
|
m_pForwardButton = new QPushButton(tr("Forward"), this);
|
||||||
|
m_pNextButton = new QPushButton(tr("Next"), this);
|
||||||
|
m_pLastButton = new QPushButton(tr("Last"), this);
|
||||||
|
|
||||||
|
m_pGotoPageNumberLineEdit = new QLineEdit(tr("1"), this);
|
||||||
|
m_pGotoPageNumberLineEdit->setFixedWidth(40);
|
||||||
|
m_pValidator = new QIntValidator(this);
|
||||||
|
m_pGotoPageNumberLineEdit->setValidator(m_pValidator);
|
||||||
|
m_pValidator->setRange(0, 100);
|
||||||
|
|
||||||
|
m_pGotoPageNumberLabel = new QLabel(tr("Page"), this);
|
||||||
|
m_pGotoPageNumberButton = new QPushButton(tr("Goto"), this);
|
||||||
|
|
||||||
|
m_pPagesLabel = new QLabel(tr("Total %d Pages, Current No.%d Page"), this);
|
||||||
|
|
||||||
// 创建主布局
|
// 创建主布局
|
||||||
QVBoxLayout *mainLayout = new QVBoxLayout(this);
|
QVBoxLayout *mainLayout = new QVBoxLayout(this);
|
||||||
|
|
||||||
|
@ -123,7 +142,26 @@ void DevicePropertyPage::InitializeTable()
|
||||||
// 创建一个水平布局来包含按钮
|
// 创建一个水平布局来包含按钮
|
||||||
QHBoxLayout *buttonLayout = new QHBoxLayout();
|
QHBoxLayout *buttonLayout = new QHBoxLayout();
|
||||||
buttonLayout->addStretch(); // 让按钮保持在右侧
|
buttonLayout->addStretch(); // 让按钮保持在右侧
|
||||||
|
|
||||||
|
buttonLayout->addWidget(m_pPagesLabel);
|
||||||
|
QSpacerItem *spacer0 = new QSpacerItem(10, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
|
||||||
|
buttonLayout->addItem(spacer0);
|
||||||
|
|
||||||
|
|
||||||
|
buttonLayout->addWidget(m_pFirstButton);
|
||||||
|
buttonLayout->addWidget(m_pForwardButton);
|
||||||
|
buttonLayout->addWidget(m_pNextButton);
|
||||||
|
buttonLayout->addWidget(m_pLastButton);
|
||||||
|
|
||||||
|
QSpacerItem *spacer = new QSpacerItem(10, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
|
||||||
|
buttonLayout->addItem(spacer);
|
||||||
|
|
||||||
|
buttonLayout->addWidget(m_pGotoPageNumberLabel);
|
||||||
|
buttonLayout->addWidget(m_pGotoPageNumberLineEdit);
|
||||||
|
buttonLayout->addWidget(m_pGotoPageNumberButton);
|
||||||
|
|
||||||
buttonLayout->addWidget(m_pButton);
|
buttonLayout->addWidget(m_pButton);
|
||||||
|
|
||||||
buttonLayout->setContentsMargins(0, 0, 0, 0); // 取消按钮的边距
|
buttonLayout->setContentsMargins(0, 0, 0, 0); // 取消按钮的边距
|
||||||
|
|
||||||
// 将表格视图和按钮布局添加到主布局
|
// 将表格视图和按钮布局添加到主布局
|
||||||
|
@ -139,18 +177,13 @@ void DevicePropertyPage::InitializeTable()
|
||||||
connect(m_pTableView, &QTableView::doubleClicked, this, &DevicePropertyPage::onTableViewDoubleClicked);
|
connect(m_pTableView, &QTableView::doubleClicked, this, &DevicePropertyPage::onTableViewDoubleClicked);
|
||||||
connect(m_pButton, &QPushButton::clicked, this, &DevicePropertyPage::onButtonClicked);
|
connect(m_pButton, &QPushButton::clicked, this, &DevicePropertyPage::onButtonClicked);
|
||||||
|
|
||||||
setLayout(mainLayout);
|
connect(m_pFirstButton, &QPushButton::clicked, this, &DevicePropertyPage::onFirstButtonClicked);
|
||||||
}
|
connect(m_pLastButton, &QPushButton::clicked, this, &DevicePropertyPage::onLastButtonClicked);
|
||||||
|
connect(m_pForwardButton, &QPushButton::clicked, this, &DevicePropertyPage::onForwardButtonClicked);
|
||||||
|
connect(m_pNextButton, &QPushButton::clicked, this, &DevicePropertyPage::onNextButtonClicked);
|
||||||
|
connect(m_pGotoPageNumberButton, &QPushButton::clicked, this, &DevicePropertyPage::onGotoButtonClicked);
|
||||||
|
|
||||||
void DevicePropertyPage::Refresh()
|
setLayout(mainLayout);
|
||||||
{
|
|
||||||
QGuiApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
|
|
||||||
TableData tbl_data;
|
|
||||||
if (Fetch(tbl_data))
|
|
||||||
{
|
|
||||||
m_myModel->setModelData(tbl_data);
|
|
||||||
}
|
|
||||||
QGuiApplication::restoreOverrideCursor();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DevicePropertyPage::setBaseType(unsigned int base, unsigned int mask)
|
void DevicePropertyPage::setBaseType(unsigned int base, unsigned int mask)
|
||||||
|
@ -159,7 +192,6 @@ void DevicePropertyPage::setBaseType(unsigned int base, unsigned int mask)
|
||||||
mask_code = mask;
|
mask_code = mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void DevicePropertyPage::onButtonClicked()
|
void DevicePropertyPage::onButtonClicked()
|
||||||
{
|
{
|
||||||
m_pTimer->stop();
|
m_pTimer->stop();
|
||||||
|
@ -167,6 +199,86 @@ void DevicePropertyPage::onButtonClicked()
|
||||||
Refresh();
|
Refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DevicePropertyPage::Refresh()
|
||||||
|
{
|
||||||
|
QGuiApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
|
||||||
|
m_TotalTableData.clear();
|
||||||
|
if (Fetch(m_TotalTableData,106))
|
||||||
|
{
|
||||||
|
PageDataProcess();
|
||||||
|
m_myModel->setModelData(m_currentPageData);
|
||||||
|
}
|
||||||
|
updatePageButtonState();
|
||||||
|
updatePageLabel();
|
||||||
|
QGuiApplication::restoreOverrideCursor();
|
||||||
|
}
|
||||||
|
|
||||||
|
int DevicePropertyPage::PageDataProcess()
|
||||||
|
{
|
||||||
|
//获取数据总数
|
||||||
|
m_totalRows = m_TotalTableData.size();
|
||||||
|
|
||||||
|
m_totalPageCount = 1;
|
||||||
|
m_currentPage = 1;
|
||||||
|
|
||||||
|
m_currentPageData.clear();
|
||||||
|
|
||||||
|
if (m_totalRows <= PER_PAGE_SIZE)
|
||||||
|
{
|
||||||
|
m_currentPageData = m_TotalTableData;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_totalPageCount = int(m_totalRows / PER_PAGE_SIZE) + 1;
|
||||||
|
m_currentPageData = m_TotalTableData.mid(0, PER_PAGE_SIZE);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DevicePropertyPage::updatePageLabel()
|
||||||
|
{
|
||||||
|
QString s = QString(PAGES_FORMAT_STRING).arg(m_totalPageCount).arg(m_currentPage);
|
||||||
|
m_pPagesLabel->setText(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DevicePropertyPage::updatePageButtonState()
|
||||||
|
{
|
||||||
|
if ( m_currentPage == m_totalPageCount) //翻到底了,超过最大的页数
|
||||||
|
{
|
||||||
|
m_pNextButton->setEnabled(false);
|
||||||
|
m_pForwardButton->setEnabled(true);
|
||||||
|
m_pLastButton->setEnabled(false);
|
||||||
|
m_pFirstButton->setEnabled(true);
|
||||||
|
}
|
||||||
|
else if (m_currentPage == 1) //翻到头了
|
||||||
|
{
|
||||||
|
m_pNextButton->setEnabled(true);
|
||||||
|
m_pForwardButton->setEnabled(false);
|
||||||
|
m_pLastButton->setEnabled(true);
|
||||||
|
m_pFirstButton->setEnabled(false);
|
||||||
|
}
|
||||||
|
else if (m_currentPage < m_totalPageCount) //页数在中间状态
|
||||||
|
{
|
||||||
|
m_pNextButton->setEnabled(true);
|
||||||
|
m_pForwardButton->setEnabled(true);
|
||||||
|
m_pLastButton->setEnabled(true);
|
||||||
|
m_pFirstButton->setEnabled(true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
assert(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DevicePropertyPage::pageTo(int page)
|
||||||
|
{
|
||||||
|
m_currentPageData.clear();
|
||||||
|
int numLeftElements = m_totalRows - (page - 1) * PER_PAGE_SIZE;
|
||||||
|
int numElements = numLeftElements >= PER_PAGE_SIZE ? PER_PAGE_SIZE : numLeftElements;
|
||||||
|
m_currentPageData = m_TotalTableData.mid((page-1) * PER_PAGE_SIZE, numElements);
|
||||||
|
m_myModel->setModelData(m_currentPageData);
|
||||||
|
}
|
||||||
|
|
||||||
void DevicePropertyPage::onTableViewDoubleClicked(const QModelIndex &index)
|
void DevicePropertyPage::onTableViewDoubleClicked(const QModelIndex &index)
|
||||||
{
|
{
|
||||||
|
@ -176,6 +288,75 @@ void DevicePropertyPage::onTableViewDoubleClicked(const QModelIndex &index)
|
||||||
QVariant datatemp=model->data(mindex);
|
QVariant datatemp=model->data(mindex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DevicePropertyPage::onFirstButtonClicked()
|
||||||
|
{
|
||||||
|
m_currentPage = 1;
|
||||||
|
|
||||||
|
updatePageButtonState();
|
||||||
|
|
||||||
|
pageTo(m_currentPage);
|
||||||
|
|
||||||
|
updatePageLabel();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DevicePropertyPage::onLastButtonClicked()
|
||||||
|
{
|
||||||
|
m_currentPage = m_totalPageCount;
|
||||||
|
|
||||||
|
updatePageButtonState();
|
||||||
|
|
||||||
|
pageTo(m_currentPage);
|
||||||
|
|
||||||
|
updatePageLabel();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DevicePropertyPage::onForwardButtonClicked()
|
||||||
|
{
|
||||||
|
m_currentPage--;
|
||||||
|
|
||||||
|
updatePageButtonState();
|
||||||
|
|
||||||
|
m_currentPageData.clear();
|
||||||
|
|
||||||
|
pageTo(m_currentPage);
|
||||||
|
|
||||||
|
updatePageLabel();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DevicePropertyPage::onNextButtonClicked()
|
||||||
|
{
|
||||||
|
m_currentPage++;
|
||||||
|
|
||||||
|
updatePageButtonState();
|
||||||
|
|
||||||
|
m_currentPageData.clear();
|
||||||
|
|
||||||
|
pageTo(m_currentPage);
|
||||||
|
|
||||||
|
updatePageLabel();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DevicePropertyPage::onGotoButtonClicked()
|
||||||
|
{
|
||||||
|
int page = m_pGotoPageNumberLineEdit->text().toInt();
|
||||||
|
if (page <=0 || page>m_totalPageCount)
|
||||||
|
{
|
||||||
|
QString s = QString(tr("Page number should be large than 0 and less than %1 !")).arg(m_totalPageCount);
|
||||||
|
QMessageBox::critical(this, tr("Critical Message"),s);
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_currentPage = page;
|
||||||
|
|
||||||
|
updatePageButtonState();
|
||||||
|
|
||||||
|
m_currentPageData.clear();
|
||||||
|
|
||||||
|
pageTo(m_currentPage);
|
||||||
|
|
||||||
|
updatePageLabel();
|
||||||
|
}
|
||||||
|
|
||||||
void DevicePropertyPage::resizeEvent(QResizeEvent *event)
|
void DevicePropertyPage::resizeEvent(QResizeEvent *event)
|
||||||
{
|
{
|
||||||
QWidget::resizeEvent(event);
|
QWidget::resizeEvent(event);
|
||||||
|
|
|
@ -4,6 +4,10 @@
|
||||||
#pragma execution_character_set("utf-8")
|
#pragma execution_character_set("utf-8")
|
||||||
|
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
|
#include <QLineEdit>
|
||||||
|
#include <QLabel>
|
||||||
|
#include <QIntValidator>
|
||||||
|
|
||||||
#include "datafetcher.h"
|
#include "datafetcher.h"
|
||||||
|
|
||||||
class MyTableModel;
|
class MyTableModel;
|
||||||
|
@ -37,18 +41,55 @@ protected:
|
||||||
// 重写resizeEvent,当QTableView窗口大小变化时按比例调整列宽
|
// 重写resizeEvent,当QTableView窗口大小变化时按比例调整列宽
|
||||||
void resizeEvent(QResizeEvent *event) override;
|
void resizeEvent(QResizeEvent *event) override;
|
||||||
|
|
||||||
|
//处理分页数据
|
||||||
|
int PageDataProcess();
|
||||||
|
|
||||||
|
//更新页数显示
|
||||||
|
void updatePageLabel();
|
||||||
|
|
||||||
|
//更新翻页按钮状态
|
||||||
|
void updatePageButtonState();
|
||||||
|
|
||||||
|
//翻倒第i页
|
||||||
|
void pageTo(int page);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void onButtonClicked();
|
void onButtonClicked();
|
||||||
|
|
||||||
void onTableViewDoubleClicked(const QModelIndex &index);
|
void onTableViewDoubleClicked(const QModelIndex &index);
|
||||||
|
|
||||||
|
void onFirstButtonClicked();
|
||||||
|
void onLastButtonClicked();
|
||||||
|
void onForwardButtonClicked();
|
||||||
|
void onNextButtonClicked();
|
||||||
|
void onGotoButtonClicked();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
unsigned int filterBaseType;
|
unsigned int filterBaseType;
|
||||||
unsigned int mask_code;
|
unsigned int mask_code;
|
||||||
QTableView* m_pTableView;
|
QTableView* m_pTableView;
|
||||||
QPushButton* m_pButton;
|
QPushButton* m_pButton;
|
||||||
|
|
||||||
|
QPushButton* m_pForwardButton;
|
||||||
|
QPushButton* m_pNextButton;
|
||||||
|
QPushButton* m_pFirstButton;
|
||||||
|
QPushButton* m_pLastButton;
|
||||||
|
|
||||||
|
QIntValidator* m_pValidator;
|
||||||
|
QLabel* m_pGotoPageNumberLabel;
|
||||||
|
QLineEdit* m_pGotoPageNumberLineEdit;
|
||||||
|
QPushButton* m_pGotoPageNumberButton;
|
||||||
|
|
||||||
|
QLabel* m_pPagesLabel;
|
||||||
|
|
||||||
QVector<int> columnWidths; // 存储初始列宽
|
QVector<int> columnWidths; // 存储初始列宽
|
||||||
|
private:
|
||||||
|
TableData m_TotalTableData;
|
||||||
|
TableData m_currentPageData;
|
||||||
|
|
||||||
|
int m_totalPageCount; //总页数
|
||||||
|
int m_currentPage; //当前页
|
||||||
|
int m_totalRows; //数据总行数
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // DEVICEPROPERTYPAGE_H
|
#endif // DEVICEPROPERTYPAGE_H
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#include "formserialportsettingdialog.h"
|
#include "formserialportsettingdialog.h"
|
||||||
#include "ui_formserialportsettingdialog.h"
|
#include "ui_formserialportsettingdialog.h"
|
||||||
|
|
||||||
#include <QListView>
|
#include <QListView>
|
||||||
|
|
|
@ -136,8 +136,10 @@ AppTcpClient::AppTcpClient(token)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void onMessage(const hv::SocketChannelPtr& channel, hv::Buffer* buf);
|
void onMessage(const hv::SocketChannelPtr& channel, hv::Buffer* buf)
|
||||||
|
{
|
||||||
|
hlogd("TCP Client<==\n%s", Kutilities::printHex((void*)buf->data(),(int)buf->size()).c_str());
|
||||||
|
}
|
||||||
|
|
||||||
int AppTcpClient::Initialize(QString remote_host, int remote_port)
|
int AppTcpClient::Initialize(QString remote_host, int remote_port)
|
||||||
{
|
{
|
||||||
|
@ -152,18 +154,14 @@ int AppTcpClient::Initialize(QString remote_host, int remote_port)
|
||||||
}
|
}
|
||||||
|
|
||||||
m_tcpclient = new hv::TcpClient();
|
m_tcpclient = new hv::TcpClient();
|
||||||
|
|
||||||
m_connfd = m_tcpclient->createsocket(remote_port, remote_host.toStdString().c_str());
|
m_connfd = m_tcpclient->createsocket(remote_port, remote_host.toStdString().c_str());
|
||||||
if (m_connfd < 0)
|
if (m_connfd < 0)
|
||||||
{
|
{
|
||||||
return -20;
|
return -20;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_tcpclient->onMessage = onMessage;
|
//m_tcpclient->onMessage = onMessage;
|
||||||
|
|
||||||
//m_tcpclient.onMessage = [](const SocketChannelPtr& channel, Buffer* buf)
|
|
||||||
//{
|
|
||||||
// hlogi("<==\n%s", Kutilities::printHex((void*)buf->data(),(int)buf->size()).c_str());
|
|
||||||
//};
|
|
||||||
|
|
||||||
reconn_setting_t reconn;
|
reconn_setting_t reconn;
|
||||||
reconn_setting_init(&reconn);
|
reconn_setting_init(&reconn);
|
||||||
|
@ -178,7 +176,8 @@ int AppTcpClient::Initialize(QString remote_host, int remote_port)
|
||||||
return m_connfd;
|
return m_connfd;
|
||||||
}
|
}
|
||||||
|
|
||||||
void onMessage(const hv::SocketChannelPtr& channel, hv::Buffer* buf)
|
void AppTcpClient::resetOnMessageCallbackFunction(onMessageCallbackFunc &func)
|
||||||
{
|
{
|
||||||
hlogi("<==\n%s", Kutilities::printHex((void*)buf->data(),(int)buf->size()).c_str());
|
m_tcpclient->onMessage = func;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -134,6 +134,7 @@ public:
|
||||||
void InitializeTableView(MyTableModel* model,QTableView* tableView);
|
void InitializeTableView(MyTableModel* model,QTableView* tableView);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef std::function<void(const hv::SocketChannelPtr&, hv::Buffer*)> onMessageCallbackFunc;
|
||||||
|
|
||||||
class AppTcpClient:public Singleton<AppTcpClient>
|
class AppTcpClient:public Singleton<AppTcpClient>
|
||||||
{
|
{
|
||||||
|
@ -144,7 +145,8 @@ public:
|
||||||
AppTcpClient(const AppTcpClient&)=delete;
|
AppTcpClient(const AppTcpClient&)=delete;
|
||||||
AppTcpClient& operator =(const AppTcpClient&)= delete;
|
AppTcpClient& operator =(const AppTcpClient&)= delete;
|
||||||
|
|
||||||
int Initialize(QString remote_host, int remote_port=DEVICE_SERVER_PORT);
|
int Initialize(QString remote_host,int remote_port=DEVICE_SERVER_PORT);
|
||||||
|
void resetOnMessageCallbackFunction(onMessageCallbackFunc& func);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
hv::TcpClient* m_tcpclient;
|
hv::TcpClient* m_tcpclient;
|
||||||
|
|
|
@ -226,14 +226,17 @@ public:
|
||||||
|
|
||||||
bool isConnected()
|
bool isConnected()
|
||||||
{
|
{
|
||||||
if (channel == NULL) return false;
|
if (channel == NULL)
|
||||||
|
return false;
|
||||||
return channel->isConnected();
|
return channel->isConnected();
|
||||||
}
|
}
|
||||||
|
|
||||||
// send thread-safe
|
// send thread-safe
|
||||||
int send(const void* data, int size)
|
int send(const void* data, int size)
|
||||||
{
|
{
|
||||||
if (!isConnected()) return -1;
|
if (!isConnected())
|
||||||
|
return -1;
|
||||||
|
|
||||||
return channel->write(data, size);
|
return channel->write(data, size);
|
||||||
}
|
}
|
||||||
int send(Buffer* buf)
|
int send(Buffer* buf)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#include "kutilities.h"
|
#include "kutilities.h"
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
|
|
@ -14,6 +14,9 @@
|
||||||
#include <QTableView>
|
#include <QTableView>
|
||||||
#include <QStandardItemModel>
|
#include <QStandardItemModel>
|
||||||
|
|
||||||
|
#include <hv/hlog.h>
|
||||||
|
|
||||||
|
#include "kutilities.h"
|
||||||
#include "devicepropertypage.h"
|
#include "devicepropertypage.h"
|
||||||
#include "formserialportsettingdialog.h"
|
#include "formserialportsettingdialog.h"
|
||||||
|
|
||||||
|
@ -29,6 +32,10 @@ MainDialog::MainDialog(QWidget *parent) :
|
||||||
|
|
||||||
// Load the window state
|
// Load the window state
|
||||||
loadWindowState();
|
loadWindowState();
|
||||||
|
|
||||||
|
//设置返回消息回调
|
||||||
|
onMessageCallbackFunc f = std::bind(&MainDialog::onMessage, this, std::placeholders::_1, std::placeholders::_2);
|
||||||
|
AppTcpClient::getInstance()->resetOnMessageCallbackFunction(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
MainDialog::~MainDialog()
|
MainDialog::~MainDialog()
|
||||||
|
@ -240,3 +247,8 @@ void MainDialog::onToolRefreshClicked()
|
||||||
{
|
{
|
||||||
QMessageBox::information(this, "Refresh Button Clicked", "Refresh");
|
QMessageBox::information(this, "Refresh Button Clicked", "Refresh");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainDialog::onMessage(const hv::SocketChannelPtr& channel, hv::Buffer* buf)
|
||||||
|
{
|
||||||
|
hlogd("MainDialog <==\n%s", Kutilities::printHex((void*)buf->data(),(int)buf->size()).c_str());
|
||||||
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
#include <QIcon>
|
#include <QIcon>
|
||||||
#include <QStackedWidget>
|
#include <QStackedWidget>
|
||||||
#include <QToolBar>
|
#include <QToolBar>
|
||||||
|
#include <hv_tcpclient.h>
|
||||||
|
|
||||||
namespace Ui
|
namespace Ui
|
||||||
{
|
{
|
||||||
|
@ -29,6 +30,8 @@ public:
|
||||||
public slots:
|
public slots:
|
||||||
void changePage(QListWidgetItem *current, QListWidgetItem *previous);
|
void changePage(QListWidgetItem *current, QListWidgetItem *previous);
|
||||||
|
|
||||||
|
//接收服务器返回消息的函数
|
||||||
|
void onMessage(const hv::SocketChannelPtr& channel, hv::Buffer* buf);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void onToolButton1Clicked();
|
void onToolButton1Clicked();
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
#include <hv/hlog.h>
|
#include <hv/hlog.h>
|
||||||
#include "MainDialog.h"
|
#include "MainDialog.h"
|
||||||
#include "mysqlutils.h"
|
#include "mysqlutils.h"
|
||||||
|
#include "kutilities.h"
|
||||||
|
|
||||||
MainWindow::MainWindow(QWidget *parent)
|
MainWindow::MainWindow(QWidget *parent)
|
||||||
: QMainWindow(parent)
|
: QMainWindow(parent)
|
||||||
|
@ -69,24 +69,37 @@ bool MainWindow::testDatabase()
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::onMessage(const hv::SocketChannelPtr& channel, hv::Buffer* buf)
|
||||||
|
{
|
||||||
|
hlogd("MainWindow<==\n%s", Kutilities::printHex((void*)buf->data(),(int)buf->size()).c_str());
|
||||||
|
}
|
||||||
|
|
||||||
bool MainWindow::testServerEcho()
|
bool MainWindow::testServerEcho()
|
||||||
{
|
{
|
||||||
using namespace hv;
|
using namespace hv;
|
||||||
|
|
||||||
QString svr = ui->serverIp->text();
|
QString svr = ui->serverIp->text();
|
||||||
|
|
||||||
int connfd = AppTcpClient::getInstance()->Initialize("127.0.0.1",DEVICE_SERVER_PORT);
|
int connfd = AppTcpClient::getInstance()->Initialize(svr,DEVICE_SERVER_PORT);
|
||||||
if (connfd <= 0)
|
if (connfd <= 0)
|
||||||
{
|
{
|
||||||
hloge("failed to connect to device data service ...");
|
hloge("failed to create socket for connecting to device data service ...");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
hlogi("connect to device data service port %d, connfd=%d ...", DEVICE_SERVER_PORT, connfd);
|
hlogi("create socket for connecting to device data service port %d, connfd=%d ...", DEVICE_SERVER_PORT, connfd);
|
||||||
|
|
||||||
|
CWaitorCursor wait1;
|
||||||
|
|
||||||
|
hv_msleep(500);
|
||||||
|
|
||||||
|
//设置返回消息回调
|
||||||
|
onMessageCallbackFunc f = std::bind(&MainWindow::onMessage, this, std::placeholders::_1, std::placeholders::_2);
|
||||||
|
AppTcpClient::getInstance()->resetOnMessageCallbackFunction(f);
|
||||||
|
|
||||||
unsigned char frame[10] = { 0x02, 0x01,0x00,0x00,0x00, 0x00,0xEE,0xFF,0xEE,0xFF};
|
unsigned char frame[10] = { 0x02, 0x01,0x00,0x00,0x00, 0x00,0xEE,0xFF,0xEE,0xFF};
|
||||||
int cnt = AppTcpClient::getInstance()->m_tcpclient->send((void*)frame,10);
|
int cnt = AppTcpClient::getInstance()->m_tcpclient->send((void*)frame,10);
|
||||||
hlogd("send %d bytes, connfd=%d ...", cnt, connfd);
|
hlogd("send %d bytes test echo signal, connfd=%d ...", cnt, connfd);
|
||||||
|
|
||||||
return cnt > 0 ? true : false;
|
return cnt > 0 ? true : false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
#pragma execution_character_set("utf-8")
|
#pragma execution_character_set("utf-8")
|
||||||
|
|
||||||
#include <QMainWindow>
|
#include <QMainWindow>
|
||||||
|
#include <hv_tcpclient.h>
|
||||||
|
|
||||||
class MainDialog;
|
class MainDialog;
|
||||||
|
|
||||||
|
@ -21,6 +22,9 @@ public:
|
||||||
MainWindow(QWidget *parent = nullptr);
|
MainWindow(QWidget *parent = nullptr);
|
||||||
~MainWindow();
|
~MainWindow();
|
||||||
|
|
||||||
|
public:
|
||||||
|
void onMessage(const hv::SocketChannelPtr& channel, hv::Buffer* buf);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void setIp(const QString &ip);
|
void setIp(const QString &ip);
|
||||||
bool testDatabase();
|
bool testDatabase();
|
||||||
|
|
|
@ -39,17 +39,16 @@
|
||||||
<widget class="QLabel" name="label">
|
<widget class="QLabel" name="label">
|
||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
<rect>
|
<rect>
|
||||||
<x>160</x>
|
<x>100</x>
|
||||||
<y>50</y>
|
<y>50</y>
|
||||||
<width>240</width>
|
<width>391</width>
|
||||||
<height>61</height>
|
<height>61</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="font">
|
<property name="font">
|
||||||
<font>
|
<font>
|
||||||
<family>宋体</family>
|
<pointsize>28</pointsize>
|
||||||
<italic>false</italic>
|
<bold>true</bold>
|
||||||
<bold>false</bold>
|
|
||||||
</font>
|
</font>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
|
@ -83,9 +82,8 @@
|
||||||
</property>
|
</property>
|
||||||
<property name="font">
|
<property name="font">
|
||||||
<font>
|
<font>
|
||||||
<family>宋体</family>
|
<pointsize>12</pointsize>
|
||||||
<italic>false</italic>
|
<bold>true</bold>
|
||||||
<bold>false</bold>
|
|
||||||
</font>
|
</font>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#include "mysqlutils.h"
|
#include "mysqlutils.h"
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
|
||||||
#include <hv/hlog.h>
|
#include <hv/hlog.h>
|
||||||
|
@ -148,13 +148,15 @@ void MysqlUtils::CloseDatabase()
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
int MysqlUtils::RetrieveTableData(TableData& tbl_data)
|
int MysqlUtils::RetrieveTableData(TableData& tbl_data,int retrieve_rows)
|
||||||
{
|
{
|
||||||
#if 1
|
#if 1
|
||||||
MYSQL_RES* res;
|
MYSQL_RES* res;
|
||||||
MYSQL_ROW row;
|
MYSQL_ROW row;
|
||||||
//执行SQL 查询
|
//执行SQL 查询
|
||||||
if (mysql_query(m_DbConnection, "SELECT * FROM `hjems`.`tbl_data` ORDER BY data_timestamp LIMIT 0,100"))
|
QString sql = QString("SELECT * FROM `hjems`.`tbl_data` ORDER BY data_timestamp LIMIT 0,%1").arg(retrieve_rows);
|
||||||
|
|
||||||
|
if (mysql_query(m_DbConnection, sql.toStdString().c_str()))
|
||||||
{
|
{
|
||||||
hloge( "Error: %s", mysql_error(m_DbConnection) ) ;
|
hloge( "Error: %s", mysql_error(m_DbConnection) ) ;
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -162,33 +164,35 @@ int MysqlUtils::RetrieveTableData(TableData& tbl_data)
|
||||||
|
|
||||||
res = mysql_use_result(m_DbConnection);
|
res = mysql_use_result(m_DbConnection);
|
||||||
|
|
||||||
|
int j = 0;
|
||||||
while ((row = mysql_fetch_row(res)) != NULL)
|
while ((row = mysql_fetch_row(res)) != NULL)
|
||||||
{
|
{
|
||||||
|
|
||||||
ModelItem item;
|
ModelItem item;
|
||||||
// item.status = STATUS_WARN;
|
item.status = STATUS_WARN;
|
||||||
// item.ParameterName= "Visual Leak Detector detected 1 memory leak (84 bytes)";
|
item.ParameterName= "Visual Leak Detector detected 1 memory leak (84 bytes)";
|
||||||
// item.sampleTime = "2024-9-10 11:22:33.444";
|
item.sampleTime = "2024-9-10 11:22:33.444";
|
||||||
// item.unit = "C";
|
item.unit = "C";
|
||||||
// item.value = "100";
|
item.value = QString("%1").arg(j++).toStdString();
|
||||||
// tbl_data.append(item);
|
tbl_data.append(item);
|
||||||
|
|
||||||
std::string buf;
|
std::string buf;
|
||||||
for (unsigned int i = 0; i < mysql_num_fields(res); ++i)
|
for (unsigned int i = 0; i < mysql_num_fields(res); ++i)
|
||||||
{
|
{
|
||||||
qDebug() << mysql_fetch_field_direct(res,i)->name ;
|
// qDebug() << mysql_fetch_field_direct(res,i)->name ;
|
||||||
QString field_name (mysql_fetch_field_direct(res,i)->name);
|
// QString field_name (mysql_fetch_field_direct(res,i)->name);
|
||||||
if (field_name == "data_timestamp")
|
// if (field_name == "data_timestamp")
|
||||||
{
|
// {
|
||||||
item.sampleTime = row[i];
|
// item.sampleTime = row[i];
|
||||||
qDebug() << row[i];
|
// qDebug() << row[i];
|
||||||
}
|
// }
|
||||||
else if (field_name == "data_content")
|
// else if (field_name == "data_content")
|
||||||
{
|
// {
|
||||||
std::string v(row[i]);
|
// std::string v(row[i]);
|
||||||
qDebug() << Kutilities::printHex(v.c_str(),v.length()).c_str();
|
// qDebug() << Kutilities::printHex(v.c_str(),v.length()).c_str();
|
||||||
ZipUtils::DecompressString(v.c_str(),v.length(),buf);
|
// ZipUtils::DecompressString(v.c_str(),v.length(),buf);
|
||||||
qDebug() << buf.c_str();
|
// qDebug() << buf.c_str();
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
qDebug() << "\r\n";
|
qDebug() << "\r\n";
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,7 +31,7 @@ public:
|
||||||
void CloseDatabase();
|
void CloseDatabase();
|
||||||
bool OpenDatabase(const std::string& server = "127.0.0.1", int dbport = 3306, const std::string& dbuser = "root", const std::string& dbpasswd = "Hj57471000", const std::string& database="hjems");
|
bool OpenDatabase(const std::string& server = "127.0.0.1", int dbport = 3306, const std::string& dbuser = "root", const std::string& dbpasswd = "Hj57471000", const std::string& database="hjems");
|
||||||
|
|
||||||
int RetrieveTableData(TableData& tbl_data);
|
int RetrieveTableData(TableData& tbl_data,int retrieve_rows=100);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
#ifdef _USING_QT_MYSQL_CONNECTOR_
|
#ifdef _USING_QT_MYSQL_CONNECTOR_
|
||||||
|
|
Loading…
Reference in New Issue