QT开发中文网

要实现鼠标移动y轴图片,移动到最低端或者最顶端时禁止移动 而不只是跟着鼠标移动

要实现鼠标移动时,图片在 Y 轴上移动,并且当图片到达窗口的顶部或底部时禁止继续移动,可以通过设置边界条件来限制 m_offset_y 的值。以下是具体实现步骤和代码示例:

  1. 获取窗口的高度,以便可以计算出允许的最大和最小偏移量。
  2. mouseMoveEvent 中进行边界检查,确保 m_offset_y 不超出这些限制。

下面是修改后的代码示例:

class yintuMusicDesign : public QMainWindow {
    Q_OBJECT

public:
    explicit yintuMusicDesign(QWidget *parent = nullptr);
    
protected:
    void paintEvent(QPaintEvent *event) override;
    void mousePressEvent(QMouseEvent *e) override;
    void mouseMoveEvent(QMouseEvent *e) override;
    void mouseReleaseEvent(QMouseEvent *e) override;

private:
    QPixmap m_chann1_image; // 图片
    int m_offset_y = 0;     // 图片的Y坐标偏移量
};

yintuMusicDesign::yintuMusicDesign(QWidget *parent)
    : QMainWindow{parent} {
    m_chann1_image = QPixmap(":/images/11111.png"); // 加载一张图片
}

// 绘制事件
void yintuMusicDesign::paintEvent(QPaintEvent *event) {
    if (m_chann1_image.isNull()) return; // 如果图片未加载则返回

    QPainter painter(this);
    painter.drawPixmap(0, m_offset_y, m_chann1_image); // 绘制背景图片

    QMainWindow::paintEvent(event); // 调用父类的 paintEvent 方法
}

// 鼠标按下事件(可选)
void yintuMusicDesign::mousePressEvent(QMouseEvent *e) {
   // 可以用于记录初始位置或其他逻辑,如果需要的话。
}

// 鼠标移动事件
void yintuMusicDesign::mouseMoveEvent(QMouseEvent *e) {
    
    int newY = e->pos().y();  // 获取当前鼠标Y坐标
    
    // 限制图片不超过窗口边界
    int minOffsetY = this->height() - m_chann1_image.height();  // 最低端 
    int maxOffsetY = 0;                                          // 最顶端
    
    if (newY < maxOffsetY) {                // 如果鼠标超出最顶端位置,保持在最顶端
        m_offset_y = maxOffsetY;
        
    } else if (newY > minOffsetY) {         // 如果鼠标超出最低端位置,保持在最低端
        m_offset_y = minOffsetY;
        
    } else {
        m_offset_y = newY;                  // 否则正常移动 
   }

   update();  // 请求重新绘制窗口
}

// 鼠标释放事件(可选)
void yintuMusicDesign::mouseReleaseEvent(QMouseEvent *e) { }

// 其他方法(省略)

关键点:

  • mouseMoveEvent 中,我们使用了两个变量 minOffsetYmaxOffsetY 来定义允许的移动范围。
  • 当鼠标 Y 坐标超出这些范围时,会将 m_offset_y 设置为允许的最大或最小值,从而限制其移动到顶部或者底部。

注意事项:

  • 确保您加载的图片高度适合您的窗口大小,否则可能需要调整相应的逻辑。
  • 您也可以根据需求添加动画效果,使得图像达到边界时呈现更平滑的视觉效果。

这样就可以实现当你试图将图片拖动到窗口顶部或底部之外时,禁止进一步拖动。若有其他问题,请随时询问!


内容由零声教学AI助手提供,问题来源于学员提问

目录导航
  • 关键点:
  • 注意事项:
  • 本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
    转载请注明出处:https://qt.0voice.com/?id=12650

    分享:
    扫描分享到社交APP
    上一篇
    下一篇
    发表列表
    游客 游客
    此处应有掌声~
    评论列表

    还没有评论,快来说点什么吧~

    联系我们

    在线咨询: 点击这里给我发消息

    微信号:3007537140

    上班时间: 10:30-22:30

    关注我们
    x

    注册

    已经有帐号?