diff --git a/QMNetwork/NetWidget/tcpclient.cpp b/QMNetwork/NetWidget/tcpclient.cpp index 1baa0ea213399b08ea0e67dc2f36e44188e0aad0..54761d19ad5df3c0d64d07a6bafc7dfdf19747e4 100644 --- a/QMNetwork/NetWidget/tcpclient.cpp +++ b/QMNetwork/NetWidget/tcpclient.cpp @@ -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::of(&QAbstractSocket::error), + this, &TCPClient::on_errorOccurred); // 由于QAbstractSocket中有两个error(),所以不能直接使用Qt5的信号槽绑定方式 #else connect(m_tcpClient, &QTcpSocket::errorOccurred, this, &TCPClient::on_errorOccurred); #endif diff --git a/QMNetwork/SimpleNetWidget/simpletcpclient.cpp b/QMNetwork/SimpleNetWidget/simpletcpclient.cpp index a980637f84166e8bd206cd3861792bcf3e12d5fc..fbebfb998c54ee97a2b9b2d92bb9dfe5d9f15937 100644 --- a/QMNetwork/SimpleNetWidget/simpletcpclient.cpp +++ b/QMNetwork/SimpleNetWidget/simpletcpclient.cpp @@ -19,6 +19,10 @@ SimpleTcpClient::SimpleTcpClient(QWidget *parent) : SimpleTcpClient::~SimpleTcpClient() { + if(m_tcpClient->state() != QAbstractSocket::UnconnectedState) + { + m_tcpClient->abort(); // 因为再关闭时会修改but_connect文本,所以如果由系统再析构时自动释放则会出现的错误,再这里关闭了就不会出现了 + } delete ui; } diff --git a/QMNetwork/SimpleNetWidget/simpletcpserver.cpp b/QMNetwork/SimpleNetWidget/simpletcpserver.cpp index 01d80cc123dec3590dbbffbf8124f8d410689e5d..9afc00c20eef2ea3df15cf0152a13ff5e613541a 100644 --- a/QMNetwork/SimpleNetWidget/simpletcpserver.cpp +++ b/QMNetwork/SimpleNetWidget/simpletcpserver.cpp @@ -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("开始监听"); } diff --git a/QtChartsDemo/AreaChart/widget.cpp b/QtChartsDemo/AreaChart/widget.cpp index 7dbc23110a0b836c118117d86721c9b8eed64e4c..6c65281a34d1b330fea43dc863db0a54c5863809 100644 --- a/QtChartsDemo/AreaChart/widget.cpp +++ b/QtChartsDemo/AreaChart/widget.cpp @@ -2,7 +2,8 @@ #include #include // 导入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则会创建失败 diff --git a/QtChartsDemo/Audio/widget.cpp b/QtChartsDemo/Audio/widget.cpp index 57c68f85e8763d576821af5384b3169eca0497bf..d5aeeb52addf01679050251d3e1d998ae32d93f4 100644 --- a/QtChartsDemo/Audio/widget.cpp +++ b/QtChartsDemo/Audio/widget.cpp @@ -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轴,指定在图表底部 diff --git a/QtChartsDemo/Audio/widget.h b/QtChartsDemo/Audio/widget.h index 23bfffb9c3209476a729c3b5905abb94372a84e8..4900ac60dc9016b660a990c409b9ffebc644baab 100644 --- a/QtChartsDemo/Audio/widget.h +++ b/QtChartsDemo/Audio/widget.h @@ -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