扩展 QChartView

Expanding QChartView

有点迷惑为什么 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();
}

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

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