引自免费微信小程序:皆我百晓生
在Qt中,如果你想要确保自定义的Y轴与QCustomPlot中的X轴原点对齐,并且在缩放时保持相对位置不变,你需要首先获取到QCustomPlot的实际绘图区域的坐标。这个区域通常不包括坐标轴、标题、网格线等元素。你可以通过axisRect()
方法获取到QCustomPlot的AxisRect对象,然后使用其vbToPixel()
方法将逻辑坐标转换为屏幕像素坐标。
下面是一个示例代码,展示了如何实现这一目标:
#include
#include "qcustomplot.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QCustomPlot plot;
plot.show();
// 设置X轴范围
plot.xAxis->setRange(0, 10);
plot.yAxis->setEnabled(false); // 如果不需要显示默认的Y轴,可以禁用它
// 获取绘图区域的左上角逻辑坐标
QPointF leftUpper = plot.axisRect()->vbToPixel(QPointF(0, plot.plotArea().yMin));
// 在指定的逻辑坐标处绘制Y轴
QPainter painter(&plot);
painter.setPen(Qt::black); // 设置线条颜色
painter.drawLine(leftUpper.x(), leftUpper.y(), leftUpper.x(), plot.plotArea().yMax);
return a.exec();
}
这段代码会创建一个QCustomPlot,并设置了一个X轴范围。然后,我们获取了绘图区域的左上角的逻辑坐标,这个坐标点对应于X轴的原点。接着,我们使用QPainter在那个逻辑坐标处开始绘制一条垂直线,直到Y轴的最大值,这样就保证了自定义的Y轴与QCustomPlot的X轴原点对齐。
注意,这种方法在窗口缩放时也能保持Y轴和X轴的相对位置不变,因为逻辑坐标不会随着窗口缩放而变化。但是,如果整个窗口被放大或缩小,这条自定义的Y轴也会相应地放大或缩小,这是正常的,因为它遵循了窗口的缩放比例。如果你不想让Y轴随窗口缩放而改变大小,你可能需要手动调整它的长度,但这通常不是你所期望的行为。
另外,如果你想获取QCustomPlot的X轴原点的像素坐标,你可以使用上述的方法,只是需要把逻辑坐标设置为X轴的最小值和Y轴的最小值,即(x_min, y_min)
。