Qt向特定widget设置内容

现有一个这样的ui设计

img

可以看出在centralWidget下我又新设置了一个mapWidget,想要只在这个里面显示一个chart。

显示chart的操作如下:

// Qt charts
    QtCharts::QLineSeries *series = new QtCharts::QLineSeries();

    series->append(0, 6);
    series->append(2, 4);
    series->append(3, 8);
    series->append(7, 4);
    series->append(10, 5);
    *series << QPointF(11, 1) << QPointF(13, 3) << QPointF(17, 6) << QPointF(18, 3) << QPointF(20, 2);

    QtCharts::QChart *chart = new QtCharts::QChart();
    chart->legend()->hide();
    chart->addSeries(series);
    chart->createDefaultAxes();
    chart->setTitle("Simple line chart example");

    QtCharts::QChartView *chartView = new QtCharts::QChartView(chart);
    chartView->setRenderHint(QPainter::Antialiasing);

默认的代码是,

    MainWindow w;
    w.setCentralWidget(chartView);

但这样就不是显示在我想要的这块区域里了,请问该怎么解决,谢谢!

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QtCharts>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // Get the existing widget from the UI
    QWidget *existing_widget = ui->chart_widget;

    // Create the chart
    QChart *chart = new QChart();
    QLineSeries *series = new QLineSeries();
    series->append(0, 6);
    series->append(2, 4);
    series->append(3, 8);
    series->append(7, 4);
    chart->addSeries(series);
    chart->createDefaultAxes();

    // Create the chart view
    QChartView *chart_view = new QChartView(chart, existing_widget);

    // Set the layout
    QVBoxLayout *layout = new QVBoxLayout();
    layout->addWidget(chart_view);
    existing_widget->setLayout(layout);
}

MainWindow::~MainWindow()
{
    delete ui;
}
  • 建议你看下这篇博客👉 :qt widgets chartview曲线图绘制(解决动态刷新内存过大问题)
  • 除此之外, 这篇博客: Qt GUI开发(一)—— Qt Chart的简单使用中的 2. 代码示例 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • // 需要的头文件
    #include <QtCharts/QChartView>
    #include <QSplineSeries>
    // #include <QLineSeries> (请看下文注释,如果你想用QLineSeries请去掉注释)
    
    MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent)
        , ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    	// ui->chart是设计器创建的,名字是我起的,请读者根据自己的情况修改
        // setRenderHint(Antialiasing);是设置抗锯齿渲染的意思
        ui->chart->setRenderHint(QPainter::RenderHint::Antialiasing);
    
    	// 创建一个QChart对象
        auto chart = new QtCharts::QChart();
        
    	// 创建线性数据列(QSplineSeries表示这是一条曲线)
    	// 如果你想要折线,可以写QLineSeries
        auto lineSeries = new QtCharts::QSplineSeries(this);
    
    	// 添加数据点,这里采用C++的流风格(<<),你也可以用append。
    	// append也有几个重载,尝试输入一下,QtCreator会告诉你
        *lineSeries << QPointF(0, 20) << QPointF(1, 12) << QPointF(2, 10) << QPointF(3, 13);
    
    	// 同理,这里再添加一条数据列,跟上边一样
    	// QLineSeries表示这条线是折现
    	auto lineSeries2 = new QtCharts::QLineSeries(this);
        *lineSeries2 << QPointF(0, 25) << QPointF(1, 19) << QPointF(2, 3) << QPointF(3, 15);
    
    	// 给图表对象添加数据列
        chart->addSeries(lineSeries);
        chart->addSeries(lineSeries2);
        // 让图标根据数据列自动创建坐标轴
        chart->createDefaultAxes();
        // 将图标装进QChartView
        ui->chart->setChart(chart);
    }
    

    效果如下:
    蓝色对应数据列lineSeries(曲线),绿色对应数据列lineSeries2(折线)
    在这里插入图片描述

  • 以下回答由chatgpt基于相关博客总结生成:

    回答:

    首先,在UI界面中放置一个Widget,可以参考参考资料中的段落0。

    然后需要在这个Widget中显示一个chart图表,需要进行以下步骤:

    1. 链接chart模块,如参考资料中的段落3,需要在项目.pro文件中添加“QT += charts”。

    2. 在Widget的头文件中引入chart模块的头文件:

    #include <QtCharts>
    using namespace QtCharts;
    
    1. 在Widget的构造函数中,先创建一个chart:
    QChart *chart = new QChart;
    
    1. 在chart中加入要显示的数据,比如添加柱状图:
    QBarSeries *series = new QBarSeries;
    series->append(new QBarSet("Data1", 1));
    series->append(new QBarSet("Data2", 2));
    series->append(new QBarSet("Data3", 3));
    chart->addSeries(series);
    
    1. 创建一个chartView,并将chart设置给它:
    QChartView *chartView = new QChartView(chart);
    chartView->setRenderHint(QPainter::Antialiasing);
    
    1. 将chartView添加到Widget中显示:
    ui->widget->layout()->addWidget(chartView);
    

    其中,ui->widget指的是在UI界面中你添加的那个Widget。

    注意:在添加chart之前,需要添加一行代码来设置属性,以确保样式表生效。

    this->setAttribute(Qt::WA_StyledBackground, true);
    

    至此,就可以在指定的Widget中显示chart了。