Qt鼠标拖动ScrollArea代替鼠标滚轮操作

news/2025/3/20 3:51:38/

    因为此前有个项目做的软件要在平板上运行,屏幕不大,滚动条太细,如果加粗滚动条影响美观,滚动条太细又点不到,用户体验较差。所以做了这个鼠标拖动即可代替鼠标滚轮的功能。


dialogex.h


#ifndef DIALOGEX_H
#define DIALOGEX_H#include <QDialog>
#include <QScrollArea>
#include <QScrollBar>
#include <QLabel>
#include <QMouseEvent>class DialogEx : public QDialog
{Q_OBJECTpublic:DialogEx(QWidget *parent = 0);~DialogEx();void init();QScrollArea*    m_pScrollArea;QWidget*        m_pScrollWidget;QLabel*         m_pTipLabel;bool            m_bMousePressed;QPoint          m_PressPosition;protected:void mouseMoveEvent(QMouseEvent *e) Q_DECL_OVERRIDE;void mousePressEvent(QMouseEvent *e) Q_DECL_OVERRIDE;void mouseReleaseEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
};#endif // DIALOGEX_H


dialogex.cpp


#include "dialogex.h"DialogEx::DialogEx(QWidget *parent): QDialog(parent), m_pScrollArea(NULL), m_pScrollWidget(NULL), m_pTipLabel(NULL), m_bMousePressed(false)
{init();
}DialogEx::~DialogEx()
{}void DialogEx::init()
{this->setFixedSize(300, 200);m_pScrollArea = new QScrollArea(this);m_pScrollWidget = new QWidget(m_pScrollArea);m_pTipLabel = new QLabel("证明我移动了", m_pScrollWidget);m_pScrollArea->setFixedSize(this->width(), this->height());m_pScrollWidget->setFixedSize(this->width(), this->height() * 2);m_pTipLabel->adjustSize();m_pScrollArea->setWidget(m_pScrollWidget);m_pScrollArea->setAlignment(Qt::AlignCenter);m_pScrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);m_pScrollArea->move(0, 0);m_pScrollWidget->move(0, 0);m_pTipLabel->move(100, 100);
}void DialogEx::mouseMoveEvent(QMouseEvent *e)
{if (!m_bMousePressed){return;}QPoint currentPt = e->pos();int dist = m_PressPosition.y() - currentPt.y();m_pScrollArea->verticalScrollBar()->setValue(m_pScrollArea->verticalScrollBar()->value() + dist);m_PressPosition = currentPt;
}void DialogEx::mousePressEvent(QMouseEvent *e)
{m_bMousePressed = true;m_PressPosition = e->pos();
}void DialogEx::mouseReleaseEvent(QMouseEvent *e)
{Q_UNUSED(e);m_bMousePressed = false;m_PressPosition.setX(0);m_PressPosition.setY(0);
}

main.cpp

#include "dialogex.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);DialogEx w;w.show();return a.exec();
}


例子中只做了竖直方向的拖动,水平方向同理



http://www.ppmy.cn/news/846590.html

相关文章

Element 表格固定列横向滚动条无法拖动的问题解决

在Element-UI中&#xff0c;当对表格列进行固定后&#xff0c;底部的横向滚动条就无法拖动了&#xff0c;主要的问题就是固定区域盖住了横向滚动条。 方案一&#xff1a;修改el-table__body-wrapper样式的层级&#xff0c;随便设个层级就可 /deep/ .el-table__body-wrapper{z…

AD中拖动器件,无法移动在一起如何解决

1、AD PCB拖动器件&#xff0c;无法移动在一起时如何解决 在PCB 界面 &#xff0c;按下快捷键O,P进入 preference对话框&#xff0c; 找到PCB Edit---->Interactive Routing---->Dragging---->Component Pushing改为 Ignore 2、改变走线模式 shiftR&#xff0c;或…

鼠标中键按下拖动滚动条(平移视图)

鼠标中键按下拖动滚动条&#xff08;平移视图&#xff09; 以下代码演示了鼠标中键在客户区拖动时&#xff0c;滚动条随之滚动的方法。其实就是用鼠标平移视图了。 示例代码下载&#xff1a;鼠标中键按下拖动滚动条&#xff08;平移视图&#xff09;.zip &#xff08;请不要直接…

利用QCustomPlot在图上画点并实现滚轮缩放和鼠标拖动

效果如图所示&#xff1a; 步骤如下&#xff1a; 1. 新建工程&#xff0c;并添加qcustomplot.h&#xff0c;qcustomplot.cpp 并在工程的pro文件添加printsupport greaterThan(QT_MAJOR_VERSION, 4): QT widgets printsupport 2. 在ui里面添加一个Widget, 并提升为QCustomPlot…

鼠标中键拖动滚动条

鼠标中键拖动滚动条 更新日期&#xff1a;2010-12-14程序下载&#xff1a;MouseScroll-exe.zip &#xff08;请不要直接使用迅雷下载&#xff09;运行环境&#xff1a;WinXP代码下载&#xff1a;MouseScroll-src.zip 测试环境&#xff1a;VC6.0WinXP图片预览&#xff1a;━━━…

【canvas教程】实现画布拖动、定点缩放,支持手势与鼠标滚轮操作

效果展示&#xff1a; 实现原理&#xff1a; 1.求实现定点缩放所需的位移值 定点缩放&#xff1a;从图中选取某点&#xff08;参照物&#xff09;为中心点进行缩放&#xff0c;缩放时无论图像怎么变化&#xff0c;该点位置始终固定不变。 有想深入了解实现原理的&#xff0c…

Proe5.0滚轮不能使用的设置

1&#xff0c; 开始菜单 2&#xff0c;找到设备 3&#xff0c;关闭即可

Canvas鼠标滚轮缩放以及画布拖动(图文并茂版)

Canvas鼠标滚轮缩放以及画布拖动 本文会带大家认识Canvas中常用的坐标变换方法 translate 和 scale&#xff0c;并结合这两个方法&#xff0c;实现鼠标滚轮缩放以及画布拖动功能。 Canvas的坐标变换 Canvas 绘图的缩放以及画布拖动主要通过 CanvasRenderingContext2D 提供的 …