QT 官方的例子,这样不会内存泄漏吗,这个chart指针,是怎么被析构的。是操作系统做的吗 。QT的半自动回收机制我也直到一些。
#include "chart.h"
#include <QtCharts/QChartView>
#include <QtWidgets/QApplication>
#include <QtWidgets/QMainWindow>
#include
QT_CHARTS_USE_NAMESPACE
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QMainWindow window;
Chart *chart = new Chart;
chart->setTitle("Dynamic spline chart");
chart->legend()->hide();
chart->setAnimationOptions(QChart::AllAnimations);
qDebug()<parent()<<"its3 father";
QChartView chartView(chart);
qDebug()<parent()<<"its3 father";
chartView.setRenderHint(QPainter::Antialiasing);
window.setCentralWidget(&chartView);
window.resize(400, 300);
window.show();
return a.exec();
}
应用程序打印,chart指针没有父母
13:48:08: Starting D:\QT5.12.6road\Examples\Qt-5.12.6\charts\build-dynamicspline-Desktop_Qt_5_12_6_MinGW_32_bit-Debug\debug\dynamicspline.exe ...
QObject(0x0) its3 father
QObject(0x0) its3 father
#ifndef CHART_H
#define CHART_H
#include <QtCharts/QChart>
#include <QtCore/QTimer>
QT_CHARTS_BEGIN_NAMESPACE
class QSplineSeries;
class QValueAxis;
QT_CHARTS_END_NAMESPACE
QT_CHARTS_USE_NAMESPACE
//![1]
class Chart: public QChart
{
Q_OBJECT
public:
Chart(QGraphicsItem *parent = 0, Qt::WindowFlags wFlags = 0);
virtual ~Chart();
public slots:
void handleTimeout();
private:
QTimer m_timer;
QSplineSeries *m_series;
QStringList m_titles;
QValueAxis *m_axisX;
QValueAxis *m_axisY;
qreal m_step;
qreal m_x;
qreal m_y;
};
//![1]
#endif /* CHART_H */
#include "chart.h"
#include <QtCharts/QAbstractAxis>
#include <QtCharts/QSplineSeries>
#include <QtCharts/QValueAxis>
#include <QtCore/QRandomGenerator>
#include <QtCore/QDebug>
Chart::Chart(QGraphicsItem *parent, Qt::WindowFlags wFlags):
QChart(QChart::ChartTypeCartesian, parent, wFlags),
m_series(0),
m_axisX(new QValueAxis()),
m_axisY(new QValueAxis()),
m_step(0),
m_x(5),
m_y(1)
{
QObject::connect(&m_timer, &QTimer::timeout, this, &Chart::handleTimeout);
m_timer.setInterval(1000);
m_series = new QSplineSeries(this);
QPen green(Qt::red);
green.setWidth(3);
m_series->setPen(green);
m_series->append(m_x, m_y);
addSeries(m_series);
addAxis(m_axisX,Qt::AlignBottom);
addAxis(m_axisY,Qt::AlignLeft);
m_series->attachAxis(m_axisX);
m_series->attachAxis(m_axisY);
m_axisX->setTickCount(5);
m_axisX->setRange(0, 10);
m_axisY->setRange(-5, 10);
m_timer.start();
}
Chart::~Chart()
{
qDebug()<<"析构";
}
void Chart::handleTimeout()
{
qreal x = plotArea().width() / m_axisX->tickCount();
// qDebug()<<plotArea().width()<<"plotArea().width()";
qreal y = (m_axisX->max() - m_axisX->min()) / m_axisX->tickCount();
m_x += y;
m_y = QRandomGenerator::global()->bounded(5) - 2.5;
m_series->append(m_x, m_y);
qDebug()<count()<<"plotArea().width()";
scroll(x, 0);
if (m_x == 100)
m_timer.stop();
}