扩展 QChartView
Expanding QChartView
有点迷惑为什么 QChartView
放在 QTabWidget
中会膨胀。
这是 QChartView
未展开(因为它被隐藏)时的应用程序图片。
应用程序的黑色部分是 QOpenGLWidget
。
当我点击图表视图时,它会逐渐变大,直到 QOpenGLWidget
被隐藏。
当QChartView
刚好在QVBoxLayout
和QOpenGLWidget
中时,则不会出现这种效果。只有当我在 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(¢ral_widget);
QVBoxLayout layout(¢ral_widget);
central_widget.setLayout(&layout);
// OpenGL Widget
QOpenGLWidget gl_widget(¢ral_widget);
gl_widget.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
layout.addWidget(&gl_widget);
// Tab Widget
QTabWidget tab_widget(¢ral_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);
有点迷惑为什么 QChartView
放在 QTabWidget
中会膨胀。
这是 QChartView
未展开(因为它被隐藏)时的应用程序图片。
应用程序的黑色部分是 QOpenGLWidget
。
当我点击图表视图时,它会逐渐变大,直到 QOpenGLWidget
被隐藏。
当QChartView
刚好在QVBoxLayout
和QOpenGLWidget
中时,则不会出现这种效果。只有当我在 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(¢ral_widget);
QVBoxLayout layout(¢ral_widget);
central_widget.setLayout(&layout);
// OpenGL Widget
QOpenGLWidget gl_widget(¢ral_widget);
gl_widget.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
layout.addWidget(&gl_widget);
// Tab Widget
QTabWidget tab_widget(¢ral_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);