#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
в коде задана политика размера, поэтому я все еще не уверен, зачем потребовалось это изменение.