16,216
社区成员
发帖
与我相关
我的任务
分享
#ifndef MYBUTTON_H
#define MYBUTTON_H
#include <QWidget>
#include <QPushButton>
#include <QDebug>
#include <QPoint>
class mybutton : public QPushButton
{
Q_OBJECT
public:
mybutton(const QString & text, QWidget * parent = 0);
virtual void mouseMoveEvent(QMouseEvent * e);
virtual void mousePressEvent(QMouseEvent * e);
virtual void keyPressEvent(QKeyEvent * e);
private:
QPoint m_beginPos;
QPoint m_lastPos;
signals:
public slots:
};
#endif // MYBUTTON_H
#include "mybutton.h"
#include "QMouseEvent"
#include "QKeyEvent"
mybutton::mybutton(const QString &text, QWidget *parent)
:QPushButton(text,parent)
{
}
void mybutton::mouseMoveEvent(QMouseEvent *e)
{
qDebug() << "mouse move!";
m_lastPos = e->pos();
int t_xDistance = m_lastPos.x() - m_beginPos.x();
int t_yDistance = m_lastPos.y() - m_beginPos.y();
if((this->x()+t_xDistance<=parentWidget()->width()-this->width()) && (this->y()+t_yDistance<=parentWidget()->height()-this->height()) && this->x()+t_xDistance>=0 && this->y()+t_yDistance>=0)
this->move(this->x()+t_xDistance,this->y()+t_yDistance);
}
void mybutton::mousePressEvent(QMouseEvent *e)
{
m_beginPos = e->pos();
}
void mybutton::keyPressEvent(QKeyEvent *e)
{
qDebug() << "key press!";
if(e->key() == Qt::Key_Left)
{
qDebug() << "key_left press!";
if(this->x()-4>=0)
this->move(this->x()-4,this->y());
}
else if(e->key() == Qt::Key_Right)
{
qDebug() << "key_right press!";
if(parentWidget()->width()-this->width()-this->x()-4>=0)
this->move(this->x()+4,this->y());
}
else if(e->key() == Qt::Key_Up)
{
qDebug() << "key_up press!";
if(this->y()-4>=0)
this->move(this->x(),this->y()-4);
}
else if(e->key() == Qt::Key_Down)
{
qDebug() << "key_down press!";
if(parentWidget()->height()-this->height()-this->y()-4>=0)
this->move(this->x(),this->y()+4);
}
}
#ifndef WIDGETBUTTON_H
#define WIDGETBUTTON_H
#include <QWidget>
#include "mybutton.h"
class WidgetButton : public QWidget
{
Q_OBJECT
public:
WidgetButton(QWidget *parent = 0);
~WidgetButton();
private:
mybutton *m_moveBtn;
};
#endif // WIDGETBUTTON_H
#include "widgetbutton.h"
#include "mybutton.h"
WidgetButton::WidgetButton(QWidget *parent)
: QWidget(parent)
{
m_moveBtn = new mybutton("move",this);
this->resize(400,400);
connect(m_moveBtn,SIGNAL(released()),this,SLOT(close()));//我想实现的功能
}