Qt Charts с кнопками на нескольких страницах - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть несколько визуализаций данных (в main.cpp), и я хочу, чтобы они выбирались для отображения на основе нажатых кнопок.Вот фрагмент main.cpp:

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

        // 1. Batting Averages!
   /*
        QBarSet *set0 = new QBarSet("Altuve");
        QBarSet *set1 = new QBarSet("Martinez");
        QBarSet *set2 = new QBarSet("Segura");
        QBarSet *set3 = new QBarSet("Simmons");
        QBarSet *set4 = new QBarSet("Trout");
        *set0 << 283 << 341 << 313 << 338 << 346 << 335;
        *set1 << 250 << 315 << 282 << 307 << 303 << 330;
        *set2 << 294 << 246 << 257 << 319 << 300 << 325;
        *set3 << 248 << 244 << 265 << 281 << 278 << 313;
        *set4 << 323 << 287 << 299 << 315 << 306 << 313;
        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("Batting Avg by Year");
        chart->setAnimationOptions(QChart::AllAnimations);
        QStringList categories;
        categories << "2013" << "2014" << "2015" << "2016" << "2017" << "2018";
        QBarCategoryAxis *axis = new QBarCategoryAxis();
        axis->append(categories);
        chart->createDefaultAxes();
        chart->setAxisX(axis, series);
    */
        // 2. Stacked Bar!
    /*
        chart->legend()->setVisible(true);
        chart->legend()->setAlignment(Qt::AlignBottom);
        QChartView *chartView = new QChartView(chart);
        chartView->setRenderHint(QPainter::Antialiasing);
        QPalette pal = qApp->palette();
        pal.setColor(QPalette::Window, QRgb(0xffffff));
        pal.setColor(QPalette::WindowText, QRgb(0x404044));
        qApp->setPalette(pal);
    */
        // 3. Line chart e!
        // Other options here https://doc.qt.io/qt-5.11/qtcharts-customchart-example.html
     /*
        QLineSeries *series = new QLineSeries();
        series->append(0, 16);
        series->append(1, 25);
        series->append(2, 24);
        series->append(3, 19);
        series->append(4, 33);
        series->append(5, 25);
        series->append(6, 34);
        QChart *chart = new QChart();
        chart->legend()->hide();
        chart->addSeries(series);
        chart->createDefaultAxes();
        QFont font;
        font.setPixelSize(18);
        chart->setTitleFont(font);
        chart->setTitleBrush(QBrush(Qt::black));
        chart->setTitle("Barry Bonds HRs as Pirate");
        QPen pen(QRgb(0x000000));
        pen.setWidth(5);
        series->setPen(pen);
        chart->setAnimationOptions(QChart::AllAnimations);
        QCategoryAxis *axisX = new QCategoryAxis();
        axisX->append("1986",0);
        axisX->append("1987",1);
        axisX->append("1988",2);
        axisX->append("1989",3);
        axisX->append("1990",4);
        axisX->append("1991",5);
        axisX->append("1992",6);
        chart->setAxisX(axisX, series);
        QChartView *chartView = new QChartView(chart);
        chartView->setRenderHint(QPainter::Antialiasing);
    */

        // 4. Pie Chart!
        // Define slices and percentage of whole they take up
    /*
        QPieSeries *series = new QPieSeries();
        series->append("Vegetables",.40);
        series->append("Beans",.20);
        series->append("Fruits",.15);
        series->append("Seeds/Nuts",.10);
        series->append("Whole Grains",.15);
        QPieSlice *slice0 = series->slices().at(0);
        slice0->setLabelVisible();
        QPieSlice *slice1 = series->slices().at(1);
        slice1->setExploded();
        slice1->setLabelVisible();
        slice1->setPen(QPen(Qt::darkGreen, 2));
        slice1->setBrush(Qt::green);
        QPieSlice *slice2 = series->slices().at(2);
        slice2->setLabelVisible();
        QPieSlice *slice3 = series->slices().at(3);
        slice3->setLabelVisible();
        QPieSlice *slice4 = series->slices().at(4);
        slice4->setLabelVisible();
        QChart *chart = new QChart();
        chart->addSeries(series);
        chart->setTitle("What Derek Ate this Week");
        chart->legend()->hide();
        QChartView *chartView = new QChartView(chart);
        chartView->setRenderHint(QPainter::Antialiasing);
*/

        // Create the main app window
        QMainWindow window;

        // Set the main window widget
        window.setCentralWidget(chartView);
        window.resize(420, 300);
        window.show();

        return a.exec();
}

Я прокомментировал и разделил каждый раздел.Если я использую charts.ui для размещения кнопок, я не уверен, как отобразить и разделить каждую визуализацию в зависимости от того, что было нажато

1 Ответ

0 голосов
/ 01 марта 2019

Я бы порекомендовал QStackedWidget, куда вы помещаете каждый из ваших QChartViews.https://doc.qt.io/qt-5/qstackedwidget.html

Или (если вы действительно хотите заменить диаграммы (означает: серия)) внутри chartView, затем удаляйте существующую серию при каждом нажатии кнопки и добавляйте новую, соответствующую вашим данным.задавать.Но у меня был просто очень плохой опыт - ось и масштабирование должны быть скорректированы для каждого набора данных.Итак, я бы порекомендовал первый вариант.

...