精华内容
下载资源
问答
  • qt5 鼠标拖拽事件 —— 编程 教学 游戏 demo, 详细看文档https://mp.csdn.net/postedit/81049635; 里面有源代码,ui设计和文档
  • C++ Qt 实现鼠标拖动旋转功能,做了一个中国汉族古音律学习辅助软件,可以查找古琴音位,十二律、五音、简谱、西音、工尺对应。 主要还是技术代码,鼠标拖动旋转功能,可以借鉴到其他项目。
  • Qt鼠标事件实现基本几何图形的绘制,支持直线、矩形、圆形、椭圆。后期可以在此基础上进行扩展。使用QGraphics完成。 博客地址:https://blog.csdn.net/luoyayun361/article/details/93890331
  • QT拖动界面的鼠标事件

    千次阅读 2019-06-01 13:11:47
    在我们设计自定义QT界面时,一般会取消界面最上面的拖动控件,为此我们需要新的界面添加鼠标拖动事件。 (1).在.h文件的类中声明函数 void mousePressEvent(QMouseEvent* event); void mouseMoveEvent...

    在我们设计自定义QT界面时,一般会取消界面最上面的拖动控件,为此我们需要新的界面添加鼠标拖动事件。

    (1).在.h文件的类中声明函数

        void mousePressEvent(QMouseEvent* event);
        void mouseMoveEvent(QMouseEvent* event);
        QPoint last_mouse_position_;

    (2).在.cpp文件中添加头文件

    #include <QMouseEvent>

    (3).在.cpp文件中补充函数内容

    void MainWindow::mousePressEvent(QMouseEvent *event)
    {
        if (event->button() == Qt::LeftButton)
            last_mouse_position_ = event->globalPos();
    }
    
    void MainWindow::mouseMoveEvent(QMouseEvent *event)
    {
        if (!event->buttons().testFlag(Qt::LeftButton))
                return;
        const QPoint position = pos() + event->globalPos()-last_mouse_position_;
        move(position.x(), position.y());
        last_mouse_position_ = event->globalPos();
    }
    

     

    展开全文
  • 功能: 鼠标按住窗口的自定义标题栏后,移动拖动整个窗口功能 实现方式: 方法一:其中CVideoPlayerApp是自定义标题栏的QWidget。 void CVideoPlayerApp::mousePressEvent(QMouseEvent *event) { if (event->...

     

    功能: 鼠标按住窗口的自定义标题栏后,移动拖动整个窗口功能

    实现方式:

    方法一:其中CVideoPlayerApp是自定义标题栏的QWidget。

    void CVideoPlayerApp::mousePressEvent(QMouseEvent *event)
    {
    	if (event->button() == Qt::LeftButton)
    	{
    		if (event->y() < VALUE_DIS || event->x() < VALUE_DIS || rect().width() - event->x() < VALUE_DIS)
    		{
    			event->ignore();
    			return;
    		}
    		m_ptPress = event->globalPos();
    		m_bLeftButtonPress = true;
    	}
    	event->ignore();
    }
    
    void CVideoPlayerApp::mouseMoveEvent(QMouseEvent *event)
    {
    	
    	if (m_bLeftButtonPress)
    	{
    		m_ptMove = event->globalPos();
    		int x = (m_ptMove - m_ptPress).x();
    		int y = (m_ptMove - m_ptPress).y();
    		emit sigMouseMoveEvent(x, y);  //触发对应的槽函数,移动窗口
    		m_ptPress = m_ptMove;
    	}
    	event->ignore();
    }
    
    void CVideoPlayerApp::mouseReleaseEvent(QMouseEvent *event)
    {
    	if (event->button() == Qt::LeftButton)
    	{
    		m_bLeftButtonPress = false;
    	}
    	event->ignore();
    }
    void CVideoPlayerApp::slotMouseMoveEvent( int x, int y )
    {
    	move(this->pos().x() + x, this->pos().y() + y);
    
    	// 更新窗口位置
    	updateWindowsPos();
    }

    方法二:其中MarkBuildDrawWgt就是一个含有自定义标题栏的QWidget。

    void MarkBuildDrawWgt::mousePressEvent(QMouseEvent *event)
    {
    	if (event->button()==Qt::LeftButton && ui.frameMarkBuildDarwTitle->underMouse())
    	{
    		m_bPress = true ;
    		m_lastPoint = event->pos(); //相对坐标
    	}
    	QWidget::mousePressEvent(event);
    }
    void MarkBuildDrawWgt::mouseMoveEvent(QMouseEvent *event)
    {
    	if (m_bPress)
    	{
    		this->move(pos()+(event->pos()-m_lastPoint));
    	}
    	QWidget::mouseMoveEvent(event);
    }
    void MarkBuildDrawWgt::mouseReleaseEvent(QMouseEvent *event)
    {
    	
    	m_bPress = false ;
    	QWidget::mouseReleaseEvent(event);
    	
    }

     方法二思路:  鼠标按下事件中监听是否为鼠标左键,并且是否在自定义标题内 -->  记录下按下的相对坐标位置,并记录按下的状态(bool)。

            鼠标移动事件中监听是否正处于按下状态  --》 计算当前鼠标相对位置 -  按下的相对坐标位置  --》 移动窗口相应的距离  --》更新按下的相对坐标位置。

    【问题】方法二中为什么相对坐标可以,感觉都是窗口move结束和开始的差值。为什么方法一中,需要不断更新上一个点的坐标?而方法二却不用?

      假设,鼠标按下的点是子窗口的左上角的点,也就是(0,0)。那么但鼠标向左在移动10px后,其鼠标相对子窗口而言是(-10,0)。然后子窗口向左移动10px后,这个过程中,鼠标移动只有这一次执行move() ,而不是1px1px的执行。

    然后当再次执行时候,鼠标向下移动10px的时候,其还是(0,10)而不是(-10,10)。这里就是关键,第二次执行event->pos()的时候,其减去的那个按下的点相对坐标没边,但其绝对坐标其实已经改变了,这就是为什么相对坐标可以直接相减,而不用在对按下点重新赋值。而用绝对路径的方法时,如果还用按下的点的绝对坐标为准,那么第二次计算的时候,如果把第一次窗口移动会原来的位置就每错了。

    另一个关键点: 无法方法一还是二的,其MouseMoveEvent()其不要看成连续的,看出是间段的理解就好了

    其实可以用向量的方法来理解。

    【问题】这个与Mouse Tracking有关系吗?我没有设置这个也可以正常运行。

    如果想触发mouseMoveEvent()这个鼠标移动的响应函数,则必须要设置窗体(或控件)是可以Mouse Tracking的,不然程序不会进入mouseMoveEvent()函数。

    [QT]获取鼠标坐标以及按键响应

     

    【注意】从实现效果上来看,用复杂的子窗口,他在移动的时候,会出现拖尾重影的效果,无论是用相对还是全局坐标

     

     

     

     

     

    qt开发之获取鼠标的相对位置和绝对位置

    相对坐标: 相对于当前MousePressEvent的窗口而已,即子窗口。

    绝对坐标: 相对于桌面而已的坐标。

     

     

     

     

     

     

     

    展开全文
  • 潘驴邓小闲出品必属精品 Qt窗体鼠标拖动放大缩小
  • app.h class app: public QDialog { Q_OBJECT ...// 鼠标 拖动窗口的 鼠标事件 void mousePressEvent(QMouseEvent *event); void mouseMoveEvent(QMouseEvent *event); void mouseReleaseEvent(QMo
    app.h
    class app: public QDialog
    {
    Q_OBJECT
    private:
    bool moving = false; //表示窗口是否在鼠标操作下移动
    QPoint m_lastPos; //上一次鼠标的位置
    protected:
    // 鼠标 拖动窗口的 鼠标事件
    void mousePressEvent(QMouseEvent *event);
    void mouseMoveEvent(QMouseEvent *event);
    void mouseReleaseEvent(QMouseEvent *event);
    public:
    explicit app(QWidget *parent = nullptr);
    ~app();
    }
    
    app.c
    
    void Dialogin::mousePressEvent(QMouseEvent *event)
    {
    m_moving = true;
    m_lastPos = event->globalPos() - pos();
    return QDialog::mousePressEvent(event);
    }
    
    void Dialogin::mouseMoveEvent(QMouseEvent *event)
    {
    if(m_moving && (event->buttons() && Qt::LeftButton) && (event->globalPos() - m_lastPos).manhattanLength() > QApplication::startDragDistance())
    {
    move(event->globalPos() - m_lastPos);
    m_lastPos = event->globalPos() - pos();
    }
    return QDialog::mouseMoveEvent(event);
    }
    
    void Dialogin::mouseReleaseEvent(QMouseEvent *event)
    {
    m_moving = false;
    }
    
    展开全文
  • Qt 鼠标拖动缩放

    热门讨论 2013-10-08 21:20:35
    Qt drag和drop基础上,实现QGraphicsItem的鼠标拖动缩放
  • QT5 实现鼠标拖拽事件

    千次阅读 2018-07-15 02:19:09
    先给最终效果:简单的来说就是重写了一下鼠标事件

    先给最终效果:


    简单的来说就是重写了一下鼠标事件:

    void camdWidget::dragEnterEvent(QDragEnterEvent *event)
    {
        toolbox* source = qobject_cast<toolbox*>(
                    event->source());
        if(source != NULL)
        {
            event->setDropAction(Qt::MoveAction);
            event->accept();
        }
        camdWidget* source1 = qobject_cast<camdWidget*>(
                    event->source());
        if(source1 != NULL)
        {
            event->setDropAction(Qt::MoveAction);
            event->accept();
        }
    
    }
    
    void camdWidget::dragMoveEvent(QDragMoveEvent *event)
    {
        toolbox* source = qobject_cast<toolbox*>(
                    event->source());
        if(source != NULL)
        {
            event->setDropAction(Qt::MoveAction);
            event->accept();
        }
        camdWidget* source1 = qobject_cast<camdWidget*>(
                    event->source());
        if(source1 != NULL)
        {
            event->setDropAction(Qt::MoveAction);
            event->accept();
        }
    }
    
    void camdWidget::dropEvent(QDropEvent *event)
    {
        toolbox* source = qobject_cast<toolbox*>(
                    event->source());
        if(source != NULL)
        {
            const QMimeData* data = event->mimeData();
            QString text = data->text();
            addUnit(text);
            event->setDropAction(Qt::MoveAction);
            event->accept();
            return;
        }
    
        camdWidget* source1 = qobject_cast<camdWidget*>(
                    event->source());
        if(source1 != NULL)
        {
            const QMimeData* data = event->mimeData();
            QString index = data->text();
    
            if(!r->is_item_recy(index.toInt())) return;
            event->setDropAction(Qt::MoveAction);
            event->accept();
            if(lastPoints.length()<1) return;
            ptr_P end = new P();
            end->p = QPoint(event->pos());
            end->num = (end->p.y()-10)/40;
            endPoints.append(end);
            qDebug()<<"[99]last length"<<lastPoints.length()<<"end length"<<endPoints.length();
    
            ptr_P tmp = lastPoints.back();
            qDebug()<<"连接"<<tmp->num<<end->num;
            r->set_re(tmp->num, end->num);
            update();
        }
    }
    
    void camdWidget::mousePressEvent(QMouseEvent *event){
        unit *child = static_cast<unit*>(childAt(event->pos()));
    //    qDebug()<< child->objectName();
        if (!child) return;
        QStringList text_index = child->objectName().split('_');
    //    qDebug()<<"press:"<<r->is_item_recy(text_index.back().toInt());
        if(r->is_item_recy(text_index.back().toInt())){
            beginPos = event->pos();
            ptr_P last = new P();
            last->p = QPoint(event->pos());
            last->num = (last->p.y()-10)/40;
            append_lastPoints(last);
            qDebug()<<"[169]last length"<<lastPoints.length()<<"end length"<<endPoints.length();
        }
    }
    
    void camdWidget::mouseMoveEvent(QMouseEvent *e)
    {
        unit *child = static_cast<unit*>(childAt(beginPos));
        if(!child) return;
        QString childName = child->objectName();
    
        if(e->buttons() & Qt::LeftButton)
        {
            QStringList text_index = childName.split('_');
            QString index = text_index.back();
    //        qDebug()<< child->objectName()<<r->is_item_recy(index.toInt());
            if(r->is_item_recy(index.toInt())){
                if((e->pos() - beginPos).manhattanLength() >= QApplication::startDragDistance()){
                    QMimeData *mimeData = new QMimeData;
                    mimeData->setText(index);
                    QDrag *drag = new QDrag(this);
                    drag->setMimeData(mimeData);
                    drag->exec(Qt::MoveAction);
                }//if
            }
        }//if
    }
    
    void camdWidget::paintEvent(QPaintEvent *)
    {
        QPainter pp(this);
        QPen pen;                                 //创建一个画笔
        pen.setColor(Qt::yellow);
        pen.setWidth(2);
        pp.setPen(pen);
    
        for(int i = 0; i<lastPoints.length()&& lastPoints.length() == endPoints.length(); i++){
            QPoint extension = lastPoints[i]->p+QPoint(70,0);
            QPoint y_extension = QPoint(extension.x(),endPoints[i]->p.y());
            pp.drawLine(lastPoints[i]->p, extension);
            pp.drawLine(extension, y_extension);
            pp.drawLine(endPoints[i]->p, y_extension);
        }
    }

    整个效果就是:

    选择模式界面:


    循环判断界面:


    条件判断界面:


    本项目的(源代码+UI+mac 安装包+ 文档)的下载地址:https://download.csdn.net/download/iwanaabigdrumstick/10541943



    展开全文
  • QT 鼠标拖动窗口的实现

    千次阅读 2018-11-13 20:26:35
    /* 鼠标拖动窗口 */ void mouseMoveEvent(QMouseEvent *event); void mousePressEvent(QMouseEvent *event); /* 记录窗口当前的位置 */ QPoint StartPos;  .cpp 文件内: voi...
  • qt 鼠标拖动案例

    2018-07-01 23:23:27
    想学习QT的朋友们,对鼠标拖动事件不是很理解的话,可以看看本案例,加深理解mousePressEvent,mouseReleaseEvent,mouseMoveEvent事件
  • QT检测鼠标移动事件

    万次阅读 多人点赞 2018-08-31 20:00:08
    *在Qt中要捕捉鼠标移动事件需要重写MouseMoveEvent,但是MouseMoveEvent为了不太耗资源,默认状态下是要鼠标按下才能捕捉到。要想鼠标不按下时的移动也能捕捉到,需要setMouseTracking(true)。 QWidget中使用是没有...
  • Qt鼠标拖动绘制基本几何图形

    千次阅读 热门讨论 2019-06-27 18:58:08
    Qt鼠标事件实现基本几何图形的绘制,支持直线、矩形、圆形、椭圆。后期可以在此基础上进行扩展。 效果图 实现 本示例使用QGraphics体系来实现,因为要移动对象,所以生成的图形必须是一个单独的对象,鼠标拖动...
  • 要在界面上按下鼠标拖动之后松开鼠标,然后就在界面上绘制出了线、矩形和圆形 代码用了抽象的概念,将三种图形抽象成了一个myShape,在代码中的体现就是定义了一个基类myShape类,其他所有的图像类都继承自这个...
  • Qt 实现鼠标拖动控件

    千次阅读 2020-11-27 13:56:58
    QT项目中,窗口设置 setWindowFlags(Qt::FramelessWindowHint) 之后,就无法拖动;所以会自定义一个menubar控件,并实现窗口拖动; 效果如上图,上代码: #include <QMainWindow> class MainWindow :...
  • Qt鼠标事件,窗口移动

    千次阅读 2019-06-11 22:31:10
    //记录鼠标左键按下时窗口和鼠标的位置偏差 }; #endif // MAINWINDOW_H mainwindow.cpp #include "mainwindow.h" #include "ui_mainwindow.h" #include #include MainWindow::MainWindow(QWidget *parent)...
  • qt、 中鼠标,键盘事件是很重要的,在我们做一些好看并好用的界面是 它们必不可少。
  • 因为此前有个项目做的软件要在平板上运行...所以做了这个鼠标拖动即可代替鼠标滚轮的功能。 dialogex.h #ifndef DIALOGEX_H #define DIALOGEX_H #include #include #include #include #include class
  • Qt实现可拖动按钮

    2020-12-17 01:09:14
    本文实例为大家分享了Qt实现可拖动按钮的具体代码,供大家参考,具体内容如下 直接上代码 self-contained.h #ifndef SELFCONTAINED_H #define SELFCONTAINED_H #include #include #include #include #include ...
  • QT鼠标穿透

    千次阅读 2019-05-09 10:16:00
    所谓“穿透”主要是指上层希望子窗体不影响鼠标事件事件直接有下层窗体(父窗体)去处理的机制; 1,所有鼠标事件都穿透的方法: 直接设置子窗体的属性 setAttribute(Qt::WA_TransparentForMouseEvents, true);...
  • QT鼠标事件总结(全)

    热门讨论 2011-01-17 10:25:17
    QT鼠标事件总结(全) 鼠标移动事件 鼠标按键事件
  • 一、鼠标拖动控件 鼠标拖动实现采用事件监听器来实现。 1.1、效果展示 1.2、详细代码 mainwindows.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include #include #include #include #include #include ...
  • QT_拖动鼠标画线_

    热门讨论 2012-03-30 16:43:32
    qt 可画多条线并且全部显示 在拖动鼠标时可显示正在画的线
  • QT通过拖动鼠标 实现框选
  • //判断鼠标是否是左键按下,且鼠标位置是否在绘画区域 if(mouse->button()==Qt::LeftButton &&Paint.contains(mouse->pos())) { press=true; QApplication::setOverrideCursor(Qt::OpenHandCursor); //设置鼠标样式 ...
  • 今天小编就为大家分享一篇PyQt5实现让QScrollArea支持鼠标拖动的操作方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • Qt鼠标响应事件

    万次阅读 2018-03-12 22:25:15
    VS2010进行Qt开发——鼠标事件本文将简单的鼠标点击事件的代码进行了测试整理,编程中主要用到三个文件:xxx.ui(界面),xxx.h(头文件)和xxx.cpp(c++实现代码)。具体如下:1. 打开新建项目Test的“test.ui”...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,059
精华内容 2,023
关键字:

qt鼠标拖动事件