蜡笔小欣丫 2024-04-24 21:06 采纳率: 0%
浏览 20

Qt自己画个Y轴,如何和qcustomplot建立的X轴原点对齐?

现在我用qcustomplot创建了个x轴,然后直接画了个竖线当Y轴,如何能使得我画的竖线和建立的X轴原点对齐呢?并且最终我窗口进行缩放,Y和X轴的相对位置不变!

或者qcustomplot创建的X轴,如何获取原点的位置呢?(创建的X轴其实位于创建的画布矩形里面,我设定的大小是X轴所在的矩形画布大小,我就是想知道他原点位置)有木有人能解答一下?

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-24 21:06
    关注

    引自免费微信小程序:皆我百晓生

    在Qt中,如果你想要确保自定义的Y轴与QCustomPlot中的X轴原点对齐,并且在缩放时保持相对位置不变,你需要首先获取到QCustomPlot的实际绘图区域的坐标。这个区域通常不包括坐标轴、标题、网格线等元素。你可以通过axisRect()方法获取到QCustomPlot的AxisRect对象,然后使用其vbToPixel()方法将逻辑坐标转换为屏幕像素坐标。

    下面是一个示例代码,展示了如何实现这一目标:

    #include <QApplication>
    #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)

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月24日

悬赏问题

  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Linux权限管理相关操作(求解答)
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表
  • ¥15 DbVisualizer Pro 12.0.7 sql commander光标错位 显示位置与实际不符
  • ¥15 android 打包报错
  • ¥15 关于stm32的问题
  • ¥15 ncode振动疲劳分析中,noisefloor如何影响PSD函数?