Qt制作360安仔精灵

43 篇文章 14 订阅

有两个QLabel, 一个显示静态图片, 一个显示动态图片, 相互切换显示 ..


#ifndef TESTCHICKEN_H
#define TESTCHICKEN_H

#include <QtWidgets/QDialog>
#include "ui_testChicken.h"
#include <QPoint>

class QMovie;
class testChicken : public QDialog
{
	Q_OBJECT

public:
	testChicken(QWidget *parent = 0);
	~testChicken();

private slots:
	void OnTimerOut();

private:
	virtual void mousePressEvent( QMouseEvent* e);
	virtual void mouseMoveEvent( QMouseEvent* e);
	virtual void mouseReleaseEvent( QMouseEvent * e);
	bool CheckDragRegion(const QPoint &g_pos);


private:
	Ui::testChickenClass ui;
	QMovie *movie;

	bool mbDragEnabled;
	QPoint mRelativePos;
};

#endif // TESTCHICKEN_H

#include "testChicken.h"
#include <QMovie>
#include <QTimer>
#include <QMouseEvent>

testChicken::testChicken(QWidget *parent)
	: QDialog(parent)
{
	ui.setupUi(this);

	mbDragEnabled = false;
	mRelativePos = QPoint(0,0);

	setWindowFlags(windowFlags() | Qt::FramelessWindowHint);
	setAttribute(Qt::WA_TranslucentBackground);

	QPixmap pixmap("AnZai.png");
	ui.labImage->setPixmap(pixmap);

	movie = new QMovie("AnZai.gif");
	ui.labAnimation->setMovie(movie);
	ui.labAnimation->hide();

	QTimer* timer = new QTimer;
	timer->setInterval(3000);
	timer->start();

	connect(timer, SIGNAL(timeout()), this, SLOT(OnTimerOut()));
}

testChicken::~testChicken()
{

}

void testChicken::OnTimerOut()
{
	if(movie->state() == QMovie::Running) {
		movie->stop();
		ui.labAnimation->hide();
		ui.labImage->show();
	}
	else {
		movie->start();
		ui.labAnimation->show();
		ui.labImage->hide();
	}
}

void testChicken::mousePressEvent( QMouseEvent* e )
{
	if(CheckDragRegion(e->globalPos())) {
		mbDragEnabled = true;
		mRelativePos= pos() - e->globalPos();
	}
}

void testChicken::mouseMoveEvent( QMouseEvent* e )
{
	if(mbDragEnabled) {
		move(e->globalPos()+ mRelativePos);
	}
}

void testChicken::mouseReleaseEvent( QMouseEvent * e )
{
	if(mbDragEnabled) {
		mbDragEnabled = false;
	}
}

bool testChicken::CheckDragRegion( const QPoint &g_pos )
{
	QPoint pt = g_pos; 
	QRect rcWnd = geometry(); 
	//qDebug() << "pos: " << pt << "geometry: " << rcWnd; 
	pt.setX(pt.x() - rcWnd.left()); 
	pt.setY(pt.y() - rcWnd.top()); 

	int nW = rcWnd.width();
	int nH = rcWnd.height(); 

	QRect rcDrag(0,	0, nW, nH);
	if(rcDrag.contains(pt)) {		
		return true;
	}

	return false; 
}

详细代码已上传 :  http://download.csdn.net/detail/robertkun/7403735

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值