没人回答,自己顶下,这是我的做法,调试没问题。
#ifndef PAINTLABEL_H
#define PAINTLABEL_H
#include <QtGui>
class paintLabel : public QPushButton
{
Q_OBJECT
public:
paintLabel(QWidget *parent=0,Qt::WindowFlags f=0);
protected:
void paintEvent(QPaintEvent *event);
void resizeEvent(QResizeEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void mousePressEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
private:
bool startDrag;
int startPos;
int endPos;
};
#endif // PAINTLABEL_H
#include "paintlabel.h"
paintLabel::paintLabel(QWidget *parent,Qt::WindowFlags f)
: QPushButton(parent)
{
resize(50,50);
startDrag=false;
update();
}
void paintLabel::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.setPen(Qt::red);
painter.drawRect(0,0,width()-1,height()-1);
}
void paintLabel::resizeEvent(QResizeEvent *event)
{
QPushButton::resizeEvent(event);
update();
}
void paintLabel::mousePressEvent(QMouseEvent *event)
{
if(event->pos().y()<=height()+1&&event->pos().y()>=height()-5)
{
QApplication::setOverrideCursor(Qt::SizeVerCursor);
startPos=height();
startDrag=true;
}
}
void paintLabel::mouseReleaseEvent(QMouseEvent *event)
{
QApplication::restoreOverrideCursor();
startDrag=false;
}
void paintLabel::mouseMoveEvent(QMouseEvent *event)
{
if(startDrag)
{
endPos=event->pos().y();
int dy=endPos-startPos;
resize(50,height()+dy);
startPos=endPos;
}
}