Изменение размера бар-диаграммы Qt Charts - PullRequest
0 голосов
/ 18 октября 2018

Ситуация:

Я написал гистограмму, используя QtCharts, QChartView, QChart, QBarSeries, QBarSet, QValueAxis и QCategoryAxis, и она отлично работает.

Проблема:

Когда я изменяю размер окна или использую QRubberband на графике, он падает.

Что я пробовал:

Любой другой график, который яписал не затрагивается этой проблемой, в том числе те, которые используют QStackedBarSeries.Проблема также возникла в другой программе, которую я написал в той же ситуации.

Код - Глава:

int D_Plot::Plot_Stat_Multi_MeanMedian(
QChartView *pChartView, 
vector<vector<double> > *vv_SetSta, 
bool pl_mean, 
bool pl_sd, 
bool pl_median, 
bool pl_adm, 
QString name_title, 
QString name_categories, 
QString name_y)

Код - Тело:

//Chart
QChart *chart = new QChart();
chart->setTitle(name_title);

//Sets
QBarSet set_mean("Mean");
QBarSet set_sdev("Standard Deviation");
QBarSet set_medi("Median");
QBarSet set_aadm("Average Absolute Deviation from Median");

//Categories
QStringList categories;

//Series
QBarSeries *series = new QBarSeries();
for(unsigned int set = 0; set < vv_SetSta->size(); set++)
{
    if(pl_mean)     set_mean.append((*vv_SetSta)[set][c_STAT_MEAN_ARITMETIC]);
    if(pl_sd)       set_sdev.append((*vv_SetSta)[set][c_STAT_STAN_DEV_SAMPLE]);
    if(pl_median)   set_medi.append((*vv_SetSta)[set][c_STAT_MEDIAN]);
    if(pl_adm)      set_aadm.append((*vv_SetSta)[set][c_STAT_ABS_DEV_MED]);

    categories.append(QString::number(set));
}
if(pl_mean)     series->append(&set_mean);
if(pl_sd)       series->append(&set_sdev);
if(pl_median)   series->append(&set_medi);
if(pl_adm)      series->append(&set_aadm);
chart->addSeries(series);

//Axis
QBarCategoryAxis *X_axis = new QBarCategoryAxis();
X_axis->append(categories);
X_axis->setTitleText(name_categories);
chart->setAxisX(X_axis, series);

QValueAxis *Y_axis = new QValueAxis();
Y_axis->setTitleText(name_y);
chart->setAxisY(Y_axis, series);


//Showing
pChartView->setChart(chart);

return ER_Okay;

1 Ответ

0 голосов
/ 18 октября 2018

Вы создаете свои объекты QBarSet локально (т. Е. Не через оператор new) и передаете указатель на эти наборы в метод QBarSet :: append, который AFAIK становится владельцем, если объекты, на которые он указывает, т.е.выходит за рамки.Это обязательно приведет к ошибке с локально размещенными объектами.

...