为什么Qt图表示例不删除动态分配的变量
Why Qt chart example does not delete dynamically allocated variables
我一直在检查Qt条形图示例,我注意到动态分配的变量根本没有被删除,为什么?我尝试复制这个示例的想法,然后在布局中使用,并在plainTextEditor中显示图表。然而,我想删除这些动态分配的变量,一旦我显示图表,但我不知道何时何地删除它们。我试图在函数结束时删除它们,但它不会在plainTextEditor上显示任何内容。我不想把这些动态分配的变量定义为成员变量,然后在析构函数中删除它们。
这里是我从Qt文档
得到的例子> #include <QtWidgets/QApplication>
> #include <QtWidgets/QMainWindow>
> #include <QtCharts/QChartView>
> #include <QtCharts/QBarSeries>
> #include <QtCharts/QBarSet>
> #include <QtCharts/QLegend>
> #include <QtCharts/QBarCategoryAxis>
>
> QT_CHARTS_USE_NAMESPACE
>
> int main(int argc, char *argv[]) {
> QApplication a(argc, argv);
>
> QBarSet *set0 = new QBarSet("Jane");
> QBarSet *set1 = new QBarSet("John");
> QBarSet *set2 = new QBarSet("Axel");
> QBarSet *set3 = new QBarSet("Mary");
> QBarSet *set4 = new QBarSet("Samantha");
>
> *set0 << 1 << 2 << 3 << 4 << 5 << 6;
> *set1 << 5 << 0 << 0 << 4 << 0 << 7;
> *set2 << 3 << 5 << 8 << 13 << 8 << 5;
> *set3 << 5 << 6 << 7 << 3 << 4 << 5;
> *set4 << 9 << 7 << 5 << 3 << 1 << 2;
>
> QBarSeries *series = new QBarSeries();
> series->append(set0);
> series->append(set1);
> series->append(set2);
> series->append(set3);
> series->append(set4);
>
>
> QChart *chart = new QChart();
> chart->addSeries(series);
> chart->setTitle("Simple barchart example");
> chart->setAnimationOptions(QChart::SeriesAnimations);
>
> QStringList categories;
> categories << "Jan" << "Feb" << "Mar" << "Apr" << "May" << "Jun";
> QBarCategoryAxis *axis = new QBarCategoryAxis();
> axis->append(categories);
> chart->createDefaultAxes();
> chart->setAxisX(axis, series);
>
> chart->legend()->setVisible(true);
> chart->legend()->setAlignment(Qt::AlignBottom);
>
> QChartView *chartView = new QChartView(chart);
> chartView->setRenderHint(QPainter::Antialiasing);
>
> QMainWindow window;
> window.setCentralWidget(chartView);
> window.resize(420, 300);
> window.show();
>
> return a.exec(); }
在Qt中,某些函数被指定为所有权,形成父/子关系。当孩子被摧毁时,父母会删除他们。
在您展示的示例中,series
是set0
到set4
的父级(从对series->append
的调用开始)。chart
是axis
和series
的父节点(来自chart->setAxisX
)。chartView
是chart
的父类(从它的构造:QChartView *chartView = new QChartView(chart)
)。最后,window
是chartView
的父节点(来自window.setCentralWidget
)。由于window
不是指针,而是具有自动存储时间的实际QMainWindow
对象,因此它将在作用域结束时被销毁,并带走其所有后代。
相关文章:
- 使用私有析构函数删除动态分配的对象
- 错误在删除动态分配的2D数组期间发生
- 删除动态分配的数组C
- C 正确删除动态分配的内存
- 必须在C 中删除动态分配的内存
- 删除动态分配的数组时出错
- 循环访问映射并删除动态分配的元素
- 正在删除动态分配的内存
- 何时删除动态分配的内存
- 在C++循环中正确删除动态分配对象的位置
- C++:删除动态分配的类时,是否也会删除不在堆上的私有成员?
- 使用 c_str() 返回的指针删除动态分配的 std::string 是否会导致C++内存泄漏
- 为什么在 C++ 中删除动态分配的数组后不能重用它的名称?
- 从启动动态分配的数组的函数中删除动态分配的数组C++
- 在数组内的对象内删除动态分配的对象
- 删除动态分配内存
- 如何删除动态分配的参数
- c++删除动态分配内存的问题
- 为什么Qt图表示例不删除动态分配的变量
- 我可以't从txt文件中获取值后,删除动态分配的2D数组