菜鸟三岁 2022-08-05 14:14 采纳率: 0%
浏览 63

指针 析构 QT 内存回收 半自动回收机制

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();
}

  • 写回答

2条回答 默认 最新

  • fpcc 2023-07-07 15:06
    关注

    QChart的父类你看看,就知道了

    评论

报告相同问题?

问题事件

  • 创建了问题 8月5日

悬赏问题

  • ¥66 换电脑后应用程序报错
  • ¥50 array数据同步问题
  • ¥15 pic16F877a单片机的外部触发中断程序仿真失效
  • ¥15 Matlab插值拟合差分微分规划图论
  • ¥15 keil5 target not created
  • ¥15 C/C++数据与算法请教
  • ¥15 怎么找志同道合的伙伴
  • ¥20 如何让程序ab.eXe自已删除干净硬盘里的本文件自己的ab.eXe文件
  • ¥50 爬虫预算充足,跪巨佬
  • ¥15 滑块验证码拖动问题悬赏