C++ Qt-在QDialog窗口中显示QChartView

C++ Qt-在QDialog窗口中显示QChartView,c++,qt,user-interface,C++,Qt,User Interface,我一直在尝试在QDialog窗口中创建折线图。而不是通过以下方式将图表添加到UI: window.setCentralWidget(chartView); 我使用以下行将其添加到UI: QChartView *chartView = new QChartView(chart, ui->widget_chart); QChartView *chartView = new QChartView(chart, ui->widget_chart); 我在UI文件中添加了一个名为widg

我一直在尝试在QDialog窗口中创建折线图。而不是通过以下方式将图表添加到UI:

window.setCentralWidget(chartView);
我使用以下行将其添加到UI:

QChartView *chartView = new QChartView(chart, ui->widget_chart);
QChartView *chartView = new QChartView(chart, ui->widget_chart);
我在UI文件中添加了一个名为widget_chart的QWidget,并应用了一个水平布局。图表显示了,但它非常小。我希望通过应用布局,图表将占据整个窗口的宽度。如果我调整窗口大小,它将动态调整大小

如何使图表占据QWidget的全部宽度

以下是my dialog.cpp文件的完整代码:

#include "dialog.h"
#include "ui_dialog.h"
#include <QtCharts>

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

    QLineSeries *series = new QLineSeries();

    series->append(0, 6);
    series->append(2, 4);
    series->append(3, 8);
    series->append(7, 4);
    series->append(10, 5);

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

    QChartView *chartView = new QChartView(chart, ui->widget_chart);
    chartView->setRenderHint(QPainter::Antialiasing);

}

Dialog::~Dialog()
{
    delete ui;
}
#包括“dialog.h”
#包括“ui_dialog.h”
#包括
Dialog::Dialog(QWidget*父项):
QDialog(父级),
ui(新建ui::对话框)
{
用户界面->设置用户界面(此);
QLineSeries*系列=新的QLineSeries();
系列->附加(0,6);
系列->附加(2,4);
系列->附加(3,8);
系列->附加(7,4);
系列->附加(10,5);
QChart*图表=新QChart();
图表->图例()->隐藏();
图表->添加系列(系列);
图表->CreateDefaultAxis();
图表->设置标题(“简单折线图示例”);
QChartView*chartView=新的QChartView(图表、ui->widget\u图表);
图表视图->SetRenderInt(QPaint::抗锯齿);
}
对话::~Dialog()
{
删除用户界面;
}

我也有类似的问题。我用布局解决了这个问题。为您的
QWidget
创建布局,然后使用
addWidget
功能添加
QChartView

your_layout->addWidget(chartView)

Wojciech Piątek的回答对我很有用。就A_Noonan而言,您唯一需要更改的是找出ui文件中的主布局,并像这样引用它

ui->main_layout->addWidget(chartView);
在这里,您应该将主布局更改为任何布局名称。同样,通过这种方式,您不需要有以下行:

QChartView *chartView = new QChartView(chart, ui->widget_chart);
QChartView *chartView = new QChartView(chart, ui->widget_chart);
现在,你可以用普通的

QChartView *chartView = new QChartView(chart);
还要确保从ui文件中删除小部件图表。
没有其他方法可以解决这个问题。

只需更改图表视图的大小,我使用的是PyQt5,但我认为它们的库语法相同

    chartView = QChartView(chart, self)
    chartView.setRenderHint(QtGui.QPainter.Antialiasing)
    chartView.resize(self.size())

    mainLayout = QVBoxLayout()
    mainLayout.addWidget(chartView, 5)
您将使用“this”操作符,而不是使用self

    chartView.resize(this->size())