在QSplitter

时间:2017-01-24 09:27:24

标签: c++ qt qcustomplot

我正在使用QCustomPlot绘制条形图。在QSplitter内可以水平排列两个这样的条形图(可以拖动)。在水平拖动分割器时,条形图会调整大小并缩放到轴标签开始重叠的点。我有一个父QWidget,其中包含QScrollArea,最终包含该情节。此小部件已添加到QSplitter

QWidget* topLeftParent = new QWidget;
topLeftParent->setLayout(new QVBoxLayout);
QScrollArea *topLeftScrollArea = new QScrollArea(this);
topLeftScrollArea->setWidget(energyGraph->GetPlot());
topLeftScrollArea->setWidgetResizable(true);
topLeftScrollArea->setFrameShape(QFrame::NoFrame);
topLeftParent->layout()->addWidget(topLeftScrollArea);
m_pTopLeftHorizontalSplitter->setMinimumWidth(500);
m_pTopLeftHorizontalSplitter->addWidget(topLeftParent);

现有行为:

在水平拖动分割器时,条形图水平扩展/收缩,直到轴标签重叠并最终处于非常小的宽度值,水平滚动条出现,这是无用的。调整窗口大小的情况也是如此。

必需行为

然而,我寻求不同的行为。我希望条形图可以水平滚动而不需要在拖动分割器时调整大小,即向左/向右拖动分割器应该显示更多/更少的图形,并且调整它们的大小

查询

  1. 如何指定条形图应具有最小尺寸并根据x轴上的刻度数进行扩展?
  2. 如何阻止图表自动展开/缩小?
  3. 到目前为止我尝试了什么

    我已尝试为绘图设置最小尺寸,但它不起作用。 我也尝试将分割器的伸展因子指定为0,但也有 no 效果,即在滚动条出现得太晚的两种情况下,行为都会自动调整条形图。

3 个答案:

答案 0 :(得分:1)

要实现所需的行为,您可以使用QTableWidget小部件。你需要:

  1. 创建一个包含两列和一行的QTableWidget小部件。
  2. QScrollArea小部件设置为QTableWidget小部件的父级。
  3. 隐藏水平和垂直标题。为此,请将horizontalHeaderVisibleverticalHeaderVisible设置为false
  4. 使用QCustomPlot方法将setCellWidget(int row, int column, QWidget * widget)小部件添加到表格中。

答案 1 :(得分:0)

这就是它的解决方法:我只需要用setWidgetResizable调用false作为滚动区域,现在我有一个永久滚动条,并且拖动分割器时自定义绘图不会调整大小。

答案 2 :(得分:0)

查找您是否有此行:

ui->my_plot->setInteractions(QCP::iRangeZoom | QCP::iRangeDrag);

并将其编辑为您想要的任何内容,例如只是范围缩放:

ui->my_plot->setInteractions(QCP::iRangeZoom);