带有按钮到多个页面的QT图表

Qt Charts with buttons to multiple pages

本文关键字:QT 图表 按钮      更新时间:2023-10-16

我有一些数据可视化(在main.cpp中),我想拥有它,以便它选择基于按下按钮显示的内容。这是一个主。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放置按钮,则我不确定如何根据按下的内容显示和拆分每个可视化

我会推荐一个qstackedwidget,您将每个QChartViews放在其中。https://doc.qt.io/qt-5/qstackedwidget.html

或(如果您想真正替换图表视图内的图表(含义:series)),然后删除每个按钮上的现有系列,然后添加与您的数据集对应的新系列。但是我对此有很糟糕的经历 - 必须针对每个数据集调整轴和缩放率。因此,我建议您的第一个选择。