⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qgamebutton.cpp

📁 linux 下的 仿联众版俄罗斯方块游戏。qt3 实现。 具有 人机交互功能。 具有 对战模式。 喜欢玩俄罗斯方块的朋友们
💻 CPP
字号:
/*********************************************************************** * * *    linux版仿联众俄罗斯方块 v1.0 *    该软件在GPL(GNU通用公共许可证)下发布 * *    Copyright (C)   <codeky@126.com> * *   This source code is licensed under the GNU General Public License * ************************************************************************//* * 自定义按钮类, 这种方法在qt4中就行不通了,~~ */#include <qapplication.h>#include <qpainter.h>#include <qpoint.h>#include <qmutex.h>#include "config.h"#include "qgamebutton.h"QMutex mouseMutex; //QGameButton::QGameButton(const QString & fn,QWidget *parent, const char *name): QWidget(parent, name ),pix(QPixmap(fn)){	mouseStatus = eMouseOut;	setMouseTracking(true);}QGameButton::~QGameButton(){}void QGameButton::paintEvent( QPaintEvent * ){	drawButton();}void QGameButton::resizeEvent ( QResizeEvent * e){	if(e->size().width()!=pix.width()/4	   || e->size().height()!=pix.height()){		   resize ( pix.width()/4,pix.height() );	}}int QGameButton::width(){	return pix.width()/4;}int QGameButton::height(){	return pix.height();}void QGameButton::setBitmap(const char *name){	pix.load(name);	drawButton(); // 重绘}void QGameButton:: mouseMoveEvent ( QMouseEvent * e ){	volatile int x,y;	mouseMutex.lock();	grabMouse ();	x=e->x();	y=e->y();	if(x<=0 || x>=width() || y<=0 || y>=height()){		mouseStatus = eMouseOut;		drawButton();	}	else{		if(mouseStatus != eMousePressed && mouseStatus!=eMouseOn){			mouseStatus =eMouseOn;			drawButton();		}	}	releaseMouse();	mouseMutex.unlock();}void QGameButton::mousePressEvent ( QMouseEvent *e){	int x,y;	mouseMutex.lock(); //据qt文档上说grabMouse有bug ...	grabMouse ();      // 鼠标是共享资源,加了锁再说	x=e->x();	y=e->y();	if(x<=0 || x>=width() || y<=0 || y>=height()){		mouseStatus = eMouseOut;	}else{		mouseStatus = eMousePressed;	}	releaseMouse();	mouseMutex.unlock();	drawButton();}void QGameButton::directReleaMouse(){	mouseStatus = eMouseOut;	releaseMouse(); // 无条件释放,}void QGameButton::mouseReleaseEvent ( QMouseEvent *e ){	int x,y;	mouseMutex.lock();	grabMouse();	x=e->x();	y=e->y();	if(x<=0 || x>=width() || y<=0 || y>=height()){		mouseStatus = eMouseOut;	}else{		mouseStatus = eMouseOn;		emit click();	}	releaseMouse();	mouseMutex.unlock();	drawButton();}void QGameButton::drawButton(void){	painter_lock();	QPainter p( this );	switch(mouseStatus)	{	case eMouseOut:		p.drawPixmap(0,0, pix );		break;	case eMouseOn:		p.drawPixmap(0,0, pix, width(),0 );		break;	case eMousePressed:		p.drawPixmap(0,0, pix, 2*width(),0 );		break;	}	painter_unlock();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -