📄 qgamebutton.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 + -