提交 89e8d1c2 编写于 作者: mahuifa's avatar mahuifa

修改bug:解决网络编程Demo部分bug

    1、解决Tcp客户端Demo关闭时崩溃问题;
    2、解决Tcp服务端接听后停止监听崩溃问题;
    3、修改Tcp中低于5.12版本时绑定error信号失败问题;
    4、QChartDemo增加部分注释,删除部分未使用的对象;
上级 ad15a35a
......@@ -21,6 +21,11 @@ TCPClient::~TCPClient()
#ifdef QT_DEBUG
qDebug() <<"~TCPClient()";
#endif
if(m_tcpClient->state() != QAbstractSocket::UnconnectedState) // 判断连接状态
{
m_tcpClient->abort();
}
delete ui;
}
......@@ -37,8 +42,9 @@ void TCPClient::connectSlots()
connect(m_tcpClient, &QTcpSocket::stateChanged, this, &TCPClient::on_stateChanged);
connect(m_tcpClient, &QTcpSocket::readyRead, this, &TCPClient::on_readyRead);
#if (QT_VERSION <= QT_VERSION_CHECK(5,15,0)) // qt5.15 后error已经弃用,这里改用errorOccurred
connect(m_tcpClient, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(on_errorOccurred(QAbstractSocket::SocketError error))); // 由于QAbstractSocket中有两个error(),所以不能直接使用Qt5的信号槽绑定方式
#if (QT_VERSION <= QT_VERSION_CHECK(5,15,0)) // qt5.15 后error已经弃用,这里改用errorOccurred
connect(m_tcpClient, QOverload<QAbstractSocket::SocketError>::of(&QAbstractSocket::error),
this, &TCPClient::on_errorOccurred); // 由于QAbstractSocket中有两个error(),所以不能直接使用Qt5的信号槽绑定方式
#else
connect(m_tcpClient, &QTcpSocket::errorOccurred, this, &TCPClient::on_errorOccurred);
#endif
......
......@@ -19,6 +19,10 @@ SimpleTcpClient::SimpleTcpClient(QWidget *parent) :
SimpleTcpClient::~SimpleTcpClient()
{
if(m_tcpClient->state() != QAbstractSocket::UnconnectedState)
{
m_tcpClient->abort(); // 因为再关闭时会修改but_connect文本,所以如果由系统再析构时自动释放则会出现的错误,再这里关闭了就不会出现了
}
delete ui;
}
......
......@@ -17,6 +17,11 @@ SimpleTcpServer::SimpleTcpServer(QWidget *parent) :
SimpleTcpServer::~SimpleTcpServer()
{
if(m_server->isListening()) // 判断是否正在监听连接
{
if(m_client) m_client->abort(); // 判断是否为空再释放
m_server->close();
}
delete ui;
}
......@@ -39,7 +44,7 @@ void SimpleTcpServer::on_but_connect_clicked()
}
else
{
m_client->abort();
if(m_client) m_client->abort(); // 判断是否为空再释放
m_server->close();
ui->but_connect->setText("开始监听");
}
......
......@@ -2,7 +2,8 @@
#include <QDebug>
#include <QtCharts> // 导入QtCharts所有的头文件,也可以单独导入某一个
// 引入qchart命名空间(注意:如果是在ui中提升为QChartView,则QT_CHARTS_USE_NAMESPACE一定要放在#include "ui_widget.h"前面,否则编译会失败)
// 引入qchart命名空间(注意:如果是在ui中提升为QChartView,
// 则QT_CHARTS_USE_NAMESPACE一定要放在#include "ui_widget.h"前面,否则编译会失败)
QT_CHARTS_USE_NAMESPACE
#include "ui_widget.h"
......@@ -44,9 +45,12 @@ void Widget::initChart()
gradient.setCoordinateMode(QGradient::ObjectMode);
series->setBrush(gradient); // 设置绘制面积图的颜色(不设置也没影响)
// QChart *chart = ui->chartView->chart(); // 方法1:可以直接获取QChartView中的QChart
#if 1
QChart *chart = ui->chartView->chart(); // 方法1:可以直接获取QChartView中的QChart
#else
QChart *chart = new QChart(); // 方法2:创建用于管理不同类型Series和其他其他图表相关对象(如图例和轴)的chart
ui->chartView->setChart(chart); // 将包含series的QChart对象添加进ui中的chartView对象中
#endif
chart->addSeries(series);
chart->setTitle("这是面积图演示Demo的标题");
chart->createDefaultAxes(); // 创建1组默认的坐标轴(XY轴),如果没有添加series则会创建失败
......
......@@ -40,11 +40,11 @@ void Widget::initChart()
chart->addSeries(m_series);
QValueAxis *axisX = new QValueAxis; // 创建X轴
axisX->setRange(0, 10000);
axisX->setRange(0, 10000); // 设置显示同时10000个音频数据点
axisX->setLabelFormat("%g");
axisX->setTitleText("采样");
QValueAxis *axisY = new QValueAxis; // 创建Y轴
axisY->setRange(0, 255);
axisY->setRange(0, 255); // 因为显示的使uchar类型数据,所以Y轴设置为0~255就可以
axisY->setTitleText("输入音频电平");
chart->addAxis(axisX, Qt::AlignBottom); // 在chart中添加创建的X轴,指定在图表底部
......
......@@ -34,10 +34,9 @@ private:
private:
Ui::Widget *ui;
QAudioDeviceInfo m_inputDevice;
XYSeriesIODevice* m_device = nullptr;
QChart* m_chart = nullptr;
QLineSeries* m_series = nullptr;
QAudioInput* m_audioInput = nullptr;
QAudioDeviceInfo m_inputDevice; // 音频输入设备信息对象
XYSeriesIODevice* m_device = nullptr; // IO接口,用于获取音频数据并显示
QLineSeries* m_series = nullptr; // 折线图对象
QAudioInput* m_audioInput = nullptr; // 录音设备对象
};
#endif // WIDGET_H
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册