• 4837阅读
  • 4回复

[提问]如何通过鼠标拖动移动QPushButton [复制链接]

上一主题 下一主题
离线dhiker
 

只看楼主 倒序阅读 楼主  发表于: 2015-06-27
如题
我用下面的代码实现,可是不理想,会出现闪烁现象
子类QPushButton

#include "Button.h"
#include <QMouseEvent>

Button::Button(QWidget *parent)
    :QPushButton(parent)
{
    isMove = false;
}

void Button::mousePressEvent(QMouseEvent *)
{
    isMove = true;
}

void Button::mouseMoveEvent(QMouseEvent *e)
{
    if(isMove)
    {
        this->move(e->pos());
        e->accept();
    }
}

void Button::mouseReleaseEvent(QMouseEvent *)
{
    isMove = false;
}

看到文档中写 Calling move() or setGeometry() inside moveEvent() can lead to infinite recursion
觉得我这就是发生递归调用了
离线flowabcd

只看该作者 1楼 发表于: 2015-06-28
可以在QWidget建立 专门处理 针对某个QPushButton的setGeometry()的槽
连接QPushButton的clicked()信号到这个槽么
离线yuyu414

只看该作者 2楼 发表于: 2015-06-29
#include "mybutton.h"

MyButton::MyButton(QWidget *parent) :
    QPushButton(parent)
{

}

void MyButton::mousePressEvent(QMouseEvent *event)
{
    m_dPoint = event->globalPos() - this->pos();
    m_isMove = true;
}

void MyButton::mouseMoveEvent(QMouseEvent *event)
{
    if (m_isMove)
    {
        this->move(event->globalPos() - m_dPoint);
    }
}

void MyButton::mouseReleaseEvent(QMouseEvent *event)
{
    m_isMove = false;
}
离线dhiker

只看该作者 3楼 发表于: 2015-06-30
回 flowabcd 的帖子
flowabcd:可以在QWidget建立 专门处理 针对某个QPushButton的setGeometry()的槽
连接QPushButton的clicked()信号到这个槽么
 (2015-06-28 00:40) 

可是我这个clicked信号是要被其他逻辑处理的呀
离线dhiker

只看该作者 4楼 发表于: 2015-07-01
回 yuyu414 的帖子
yuyu414:#include "mybutton.h"
MyButton::MyButton(QWidget *parent) :
    QPushButton(parent)
{
....... (2015-06-29 16:36) 

多谢,你的代码可以很好的运行
快速回复
限100 字节
 
上一个 下一个