Расширение QChartView

#c #qt #qt5 #qtcharts

Вопрос:

Немного теряюсь в догадках о том, почему QChartView расширится, когда попадет внутрь а QTabWidget .

Вот изображение приложения, когда QChartView оно не расширяется (потому что оно скрыто).

введите описание изображения здесь

Черная часть приложения является QOpenGLWidget .

Когда я нажимаю на представление диаграммы, оно постепенно увеличивается в размере, пока QOpenGLWidget не будет скрыто.

введите описание изображения здесь

Когда QChartView находится просто в QVBoxLayout с QOpenGLWidget , то этого эффекта не происходит. Это происходит только тогда, когда я добавляю QChartView внутри QTabWidget , что это происходит. Я пытаюсь понять, как 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(amp;main_window);

  main_window.setCentralWidget(amp;central_widget);

  QVBoxLayout layout(amp;central_widget);

  central_widget.setLayout(amp;layout);

  // OpenGL Widget

  QOpenGLWidget gl_widget(amp;central_widget);

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

  layout.addWidget(amp;gl_widget);

  // Tab Widget

  QTabWidget tab_widget(amp;central_widget);

  layout.addWidget(amp;tab_widget);

  // Log

  QTextEdit text_edit(amp;tab_widget);

  text_edit.setReadOnly(true);

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

  // Chart View

  QtCharts::QChartView chart_view(amp;tab_widget);

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

  return app.exec();
}
 

Ответ №1:

Проблема вызвана тем, что QChartView имеет политику расширения размера, в отличие от QOpenGLWidget, поэтому, когда он становится видимым, он расширяется, скрывая другой виджет. Решение состоит в том, чтобы установить коэффициент растяжения, связанный с каждым виджетом в макете:

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

Комментарии:

1. Это исправило эту проблему, спасибо. Однако QOpenGLWidget Expanding в коде задана политика размера, поэтому я все еще не уверен, зачем потребовалось это изменение.