功能: - UDP端口监听,实时接收数据 - 解析16通道逗号分隔的ADC数据 - 实时波形绘制(支持滚轮缩放、右键拖拽、双击恢复) - 数据自动保存到 data_端口号/ 目录 - 支持打开历史CSV文件回放查看 - 16通道独立颜色,可切换显示/隐藏 - 深色主题界面
53 lines
1.2 KiB
C++
53 lines
1.2 KiB
C++
#include "udpreceiver.h"
|
|
#include <QNetworkInterface>
|
|
|
|
UdpReceiver::UdpReceiver(QObject *parent)
|
|
: QObject(parent)
|
|
, m_socket(new QUdpSocket(this))
|
|
, m_port(0)
|
|
{
|
|
connect(m_socket, &QUdpSocket::readyRead, this, &UdpReceiver::onReadyRead);
|
|
}
|
|
|
|
UdpReceiver::~UdpReceiver()
|
|
{
|
|
stop();
|
|
}
|
|
|
|
bool UdpReceiver::start(quint16 port)
|
|
{
|
|
stop();
|
|
m_port = port;
|
|
|
|
if (!m_socket->bind(QHostAddress::AnyIPv4, port, QUdpSocket::ShareAddress)) {
|
|
emit errorOccurred(QString("无法绑定端口 %1: %2").arg(port).arg(m_socket->errorString()));
|
|
return false;
|
|
}
|
|
|
|
// 设置足够大的缓冲区
|
|
m_socket->setSocketOption(QAbstractSocket::ReceiveBufferSizeSocketOption, 8 * 1024 * 1024);
|
|
|
|
return true;
|
|
}
|
|
|
|
void UdpReceiver::stop()
|
|
{
|
|
m_socket->close();
|
|
m_port = 0;
|
|
}
|
|
|
|
bool UdpReceiver::isRunning() const
|
|
{
|
|
return m_socket->state() == QAbstractSocket::BoundState;
|
|
}
|
|
|
|
void UdpReceiver::onReadyRead()
|
|
{
|
|
while (m_socket->hasPendingDatagrams()) {
|
|
QByteArray datagram;
|
|
datagram.resize(m_socket->pendingDatagramSize());
|
|
m_socket->readDatagram(datagram.data(), datagram.size());
|
|
emit dataReceived(datagram);
|
|
}
|
|
}
|