扩展 QChartView

Posted

技术标签:

【中文标题】扩展 QChartView【英文标题】:Expanding QChartView 【发布时间】:2021-09-17 17:08:52 【问题描述】:

对于为什么将QChartView 放在QTabWidget 中时会扩展,有点不知所措。

这是QChartView 未展开时的应用程序图片(因为它被隐藏了)。

应用的黑色部分是QOpenGLWidget

当我点击图表视图时,它会逐渐变大,直到 QOpenGLWidget 被隐藏。

QChartView 只是在QVBoxLayoutQOpenGLWidget 中时,则不会发生此效果。只有当我在QTabWidget 中添加QChartView 时才会发生这种情况。我试图弄清楚如何让QChartView 不扩展,并以与其他小部件相同的方式调整大小(例如本例中的QTextEdit 小部件)。

这是代码,它是作为重现效果的最小示例编写的。

#include <QApplication>
#include <QChart>
#include <QChartView>
#include <QMainWindow>
#include <QOpenGLWidget>
#include <QTabWidget>
#include <QTextEdit>
#include <QVBoxLayout>

int
main(int argc, char** argv)

  QApplication app(argc, argv);

  // Main Window

  QMainWindow main_window;

  main_window.resize(1280, 720);

  main_window.show();

  // Central Widget

  QWidget central_widget(&main_window);

  main_window.setCentralWidget(&central_widget);

  QVBoxLayout layout(&central_widget);

  central_widget.setLayout(&layout);

  // OpenGL Widget

  QOpenGLWidget gl_widget(&central_widget);

  gl_widget.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);

  layout.addWidget(&gl_widget);

  // Tab Widget

  QTabWidget tab_widget(&central_widget);

  layout.addWidget(&tab_widget);

  // Log

  QTextEdit text_edit(&tab_widget);

  text_edit.setReadOnly(true);

  tab_widget.addTab(&text_edit, "Log");

  // Chart View

  QtCharts::QChartView chart_view(&tab_widget);

  tab_widget.addTab(&chart_view, "Chart");

  return app.exec();

【问题讨论】:

【参考方案1】:

问题是因为 QChartView 具有扩展 sizePolicy 而不是 QOpenGLWidget,所以当它变得可见时,它会扩展,隐藏另一个小部件。解决方案是为布局中的每个小部件设置一个拉伸因子:

layout.addWidget(&gl_widget, 1);
layout.addWidget(&tab_widget, 1);

【讨论】:

这解决了这个问题,谢谢。不过,QOpenGLWidget 的大小策略在代码中设置为 Expanding,所以我仍然不确定为什么需要进行此更改。

以上是关于扩展 QChartView的主要内容,如果未能解决你的问题,请参考以下文章

使用橡皮筋选择在 QChartView 中选择 QLineSeries

QLineSeries QChartView 生成折线

如何在 Qt Designer 中安装 QChartView?

QSplineSeries QChartView绘制曲线

如何强制 QChartView 仅绘制自身的一部分

Qt for python QChartView鼠标滚动放大缩小