首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当窗口大小改变时,如何自动缩放Qt中的图表?

当窗口大小改变时,如何自动缩放Qt中的图表?
EN

Stack Overflow用户
提问于 2018-04-27 14:37:04
回答 1查看 1.9K关注 0票数 1

我用QChart & QGraphicsScene & QGraphicsView创建了一个图表,但是当窗口发生变化时,图表不会自动放大或缩小。我怎么能这么做?我在QChart、QGraphicsScene或QGraphicsView类中没有任何信号或插槽。我知道我可以使用QChart & QChartView,但我希望QChart & QGraphicsScene & QGraphicsView有某种用途。这是我绘制图表的代码:

代码语言:javascript
复制
void MainWindow::on_actionDraw_Sine_Chart_triggered()
{
    QSplineSeries *spline = new QSplineSeries;

    for (double x = -M_PI; x < M_PI; x += 0.01) {
        spline->append(x, sin(x));
    }

    spline->setName(tr("Sine Curve"));    
    QChart *chart = new QChart;
    chart->addSeries(spline);
    chart->createDefaultAxes();
    chart->axisX()->setRange(-4, 4);
    chart->axisY()->setRange(-1.2, 1.2);
    chart->setGeometry(ui->graphicsView->rect());

    QGraphicsScene *scene = new QGraphicsScene;
    scene->addItem(chart);
    ui->graphicsView->setScene(scene);
}

完整的代码是可用的这里

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-27 17:14:15

您必须跟踪viewport的大小变化并更改QChart的大小,因为我们使用eventFilter,但是由于它是另一种方法,所以需要该图表是类的一个属性。

此外,不建议在一个槽中创建场景,而是在构造函数中创建场景,与QChart一样,然后只添加该系列。

*.h

代码语言:javascript
复制
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    ...
    bool eventFilter(QObject *watched, QEvent *event); // +++
private:
    Ui::MainWindow *ui;
    QChart *chart; // +++
    QGraphicsScene *scene; // +++
};

*.cpp

代码语言:javascript
复制
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    scene = new QGraphicsScene;
    chart = new QChart;
    scene->addItem(chart);
    ui->graphicsView->setScene(scene);
    ui->graphicsView->viewport()->installEventFilter(this);

}

void MainWindow::on_actionDraw_Sine_Chart_triggered(){
    QSplineSeries *spline = new QSplineSeries;

    for (double x = -M_PI; x < M_PI; x += 0.01) {
        spline->append(x, sin(x));
    }
    spline->setName(tr("Sine Curve"));
    chart->addSeries(spline);
}


bool MainWindow::eventFilter(QObject *watched, QEvent *event)
{
    if(watched == ui->graphicsView->viewport() && event->type() == QEvent::Resize){
        if(chart)
            chart->resize(ui->graphicsView->viewport()->size());
    }
    return QMainWindow::eventFilter(watched, event);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50064727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档