Qt - 在QDialog窗口中显示QChartView

时间:2017-02-26 20:11:56

标签: c++ qt user-interface

我一直在关注this example尝试在QDialog窗口中创建折线图。而不是使用以下内容将图表添加到UI:

window.setCentralWidget(chartView);

我正在使用此行将其添加到UI:

QChartView *chartView = new QChartView(chart, ui->widget_chart);

我将一个名为widget_chart的QWidget添加到我的UI文件中并应用了水平布局。图表显示但非常小。我原以为通过应用布局,图表将占据窗口的整个宽度。如果我调整窗口大小,它将动态调整大小。

Screenshot of program

我怎样才能使图表占据QWidget的全部宽度?

以下是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;
}

3 个答案:

答案 0 :(得分:0)

WojciechPiątek的答案为我工作。就 A_Noonan 而言,唯一需要改变的是找出你的ui文件中的主要布局,并像这样引用它

ui->main_layout->addWidget(chartView);

在这里,您应该将 main_layout 更改为您的布局名称。也是这样,你不需要这一行:

QChartView *chartView = new QChartView(chart, ui->widget_chart);

,而不是你可以使用常规的。

QChartView *chartView = new QChartView(chart);

还要确保从ui_file中删除widget_chart。 除此之外别无他法。

答案 1 :(得分:0)

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

int i = 0;
(dataGridView1.Columns[1] as DataGridViewComboBoxColumn).DataSource = countrys.Select(x=> new {Key = i++, Value = x}).ToList();
(dataGridView1.Columns[1] as DataGridViewComboBoxColumn).DisplayMember = "Value";
(dataGridView1.Columns[1] as DataGridViewComboBoxColumn).ValueMember = "Key";

您将使用'this'运算符,而不是使用self。

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

    mainLayout = QVBoxLayout()
    mainLayout.addWidget(chartView, 5)

答案 2 :(得分:-1)

我有类似的问题。我使用布局解决了它。为QWidget创建布局,然后使用QChartView函数添加addWidget

your_layout->addWidget(chartView)