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

📄 softlock.cpp

📁 moto e2键盘软锁第三版
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/*E2键盘软锁v3.02008-2-1written by letterb	@scnu_cs _05Email : boy.letterb@yahoo.com.cn	或	letterb@tom.comthanks lasly(sdk)*/#define QT_NO_DRAGANDDROP#define QT_NO_PROPERTIES#include <E2_EZX_ZApplication.h>#include <E2_EZX_ZKbMainWidget.h>#include <E2_EZX_ZMessageDlg.h>#include <E2_EZX_ZLabel.h>#include <E2_EZX_ZScrollPanel.h>#include <E2_EZX_ZSoftKey.h>#include <E2_EZX_ZFormContainer.h>#include <qpainter.h>#include <qlabel.h>#include <stdio.h>#include <stdlib.h>#include <qfile.h>#include <qtextcodec.h>#include <qlayout.h>#include <string.h>#include <time.h>#include <unistd.h>#include <qtimer.h>#include "SpeciOperation.h"#include "misscall.h"#define KEY_LOCKING_STR	"键盘己锁"#define KEY_ULOCK_STR	"      解锁"#define KEY_NOTIFY		"请按*键解锁"#define KEY_MEDIA			"播放键被按下"#define SCREEN_W 240#define SCREEN_H 320extern "C" int  UTIL_GetBatteryLevel();	//电池水平extern "C" int UTIL_GetSignalQuality();	//信号质量typedef struct tagDate		//日期格式{  int day;  int month;  int year;}Date,*PDate;QString ChineseAndEnglish(const char*ChineseString);QTextCodec* gbk_codec = QTextCodec::codecForName("UTF-8");
QString ChineseAndEnglish(const char*ChineseString)
{
	return gbk_codec->toUnicode(ChineseString);
} enum clock_type	//模拟时钟{	CLK_SEC,	CLK_MIN};class MyZKbMain : public ZKbMainWidget{		Q_OBJECT//////////////////	public:	long pre_main_db_size;	//原main.db的大小	long now_main_db_size;	//当前main.db的大小	u_int ulock_timeout;	//解锁超时	int start_x;			//绘制原点	int start_y;		int sec_len;		//秒针长		int min_len;		int hou_len;		int clk_center_x;	//时钟中心		int clk_center_y;			int dot_r;			//时钟点		int sec_width;		//秒针宽度		int min_width;		int hou_width;//		int clk_color;		int sec_color;		//秒针颜色		int min_color;		int hou_color;		int dig_color;		//数码时钟颜色		int date_color;	//日期颜色		int dot_color;		//模拟时钟中心颜色//		int dig_size;//		int date_size;		int date_flag;		//日期排版(居中、靠右、靠左)		int date_x;			//日期位置		int date_y;		int dig_format;	//数码时钟格式(12/24进制)		int dig_x;			//数码时钟位置		int dig_y;		int font_size;		//字体大小		int color_default;//缺省颜色		int x_default;		//缺省位置		int y_default;		int flag_default;	//缺省排版格式				int battery_w;		//电池宽		int battery_h;		//电池高		int battery_x;		//电池位置		int battery_y;		int battery_color;	//电池颜色		int battery_r;		//电池圆角角度				int signal_space;	//信号条间隔		int signal_min;	//信号最小长		int signal_max;	//信号最大长		int signal_w;		//信号条宽		int signal_x;		//信号间隔		int signal_y;		int signal_color;	//信号颜色/////////////////////////////////////////////////////		bool flag_update_part;	//是否部分更新		bool flag_media_key;		//是否按下音乐键		char curinfo[300];	//当前状态信息		QImage myimg;		//内存图片//		QImage dotimg;//		QImage clockimg;//		uchar imgbits[240*3*320];		char str_default[256];	//缺省字符		bool flag_w_unlock;		//是否按下*键		struct tm * timeinfo;	//时间格式		int clk_x_arr[5];			//保存之前和当前的模拟时钟x坐标		int clk_y_arr[5];			//	public:	MyZKbMain(char * currentpath):ZKbMainWidget((ZHeader::HEADER_TYPE)3,NULL , "ZMainWidget" , 0)	{		ini_soft();		//初始化		setMainWidgetTitle("softlock3");	//	QVBoxLayout* layout = getVBoxLayout();	//		inifontfile();		setFullScreenMode(true, true);		myimg.load("softlock.png");	//装载图片//		dotimg.load("dot.png");//		clockimg.load("softlock.png");/*		uchar * bit=myimg.bits();		for(int j=0 ; j<320 ; j++)			for(int i=0;i<240*3;i++)				imgbits[i]=bit[i][j];*///		imgbits=img.bits();		startTimer(1000);	//激活timer}public :void drawdate(QPainter & p);							//绘制日期void GetDayOf(Date&, QString&);						//获取当前的农历int getintformini(FILE *fp , char * keyname);	//取ini键值int ini_soft();											int drawclock(QPainter & p , int & blt_x ,int & blt_y ,int & blt_w , int & blt_h);	//绘制模拟时钟int drawbattery(QPainter & p);						//绘制电池状态int drawsignal(QPainter & p);							//绘制信号状态long get_main_db_size();								//获取当前main.db长度~MyZKbMain(); private slots://	virtual void timerEvent(QTimerEvent* e);	virtual void keyPressEvent(QKeyEvent* k);	virtual void keyReleaseEvent(QKeyEvent* k);	virtual void paintEvent( QPaintEvent * pe);	virtual void timerEvent(QTimerEvent* e);	void slotTimeout();};long MyZKbMain::get_main_db_size()//获取当前main.db长度{    FILE *fp;    fp=fopen("/ezx_user/sysDatabase/main.db","rb");    if(!fp)    	return 0;    fseek(fp,0,SEEK_END);   long db_size=0;   db_size=ftell(fp);    printf("ftell=%d\n",db_size);    fclose(fp);    return db_size;}int MyZKbMain::drawsignal(QPainter & p){	int qual=UTIL_GetSignalQuality();		//获取当前信号质量/*	static int old_signal =-1;	if(qual==old_signal)		return 0;	old_signal=qual;*/	int x=signal_x;	int y=signal_y;	int offset=(signal_max-signal_min)/10;	QPen pen;	pen.setColor(signal_color);	pen.setWidth(signal_w);	p.setPen(pen);	if(qual)	{		for(int i=0 ;i < qual ;i++)		{			p.drawLine( x , y , x + signal_min + offset * i *2 , y );			y-=signal_space;			x-=offset;		}	}	else	{		p.drawEllipse(signal_x,signal_y,signal_min,signal_min);	}	return 1;}int MyZKbMain::drawbattery(QPainter & p){	int level=UTIL_GetBatteryLevel();		//获取当前电池水平	static int x=battery_x;	static int y=battery_y;//	static int w=battery_w;	static int h=battery_h;	static QColor color=battery_color;	static int old_level=-1;	if(old_level==level)	{		p.setPen(battery_color);	//设置电池颜色		p.drawRoundRect(  battery_x,  battery_y,  battery_w, battery_h , battery_r, battery_r );		p.setBrush(color);		if(level)			p.drawRoundRect(  x,  y,  battery_w, h , battery_r, battery_r );				return 0;	}	else		old_level=level;/**/	p.setPen(battery_color);	if(level)	{		color=battery_color;		h=(int) (( battery_h /5.0f ) *  level );		y= battery_y + ( battery_h / 5.0f ) * (5-level );		p.drawRoundRect(  battery_x,  battery_y,  battery_w, battery_h , battery_r, battery_r );		p.setBrush(color);		p.drawRoundRect(  x,  y,  battery_w, h , battery_r, battery_r );	}	else	{//		color=QColor(255-(battery_color >> 16) & 0xff ,255-(battery_color >> 8) & 0xff,255- (battery_color & 0xff));		p.drawRoundRect(  battery_x,  battery_y,  battery_w, battery_h , battery_r, battery_r );//		p.setBrush(color);//		p.drawRoundRect(  battery_x,  battery_y,  battery_w, battery_h , battery_r, battery_r );	}	return 0;}void  MyZKbMain:: drawdate(QPainter & p){	static int countor=0;	static QString nltemp;	if(countor!=timeinfo->tm_mday)	{			countor=1;		char week[7][10]={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};		QString qstrweek;		char timestr[256];		sprintf(timestr,"%4d-%2d-%2d\n",1900+timeinfo->tm_year, 1+timeinfo->tm_mon,timeinfo->tm_mday);			Date tdate;		 tdate.year=timeinfo->tm_year+1900;		 tdate.month=timeinfo->tm_mon+1;		 tdate.day=timeinfo->tm_mday;		GetDayOf(tdate,nltemp);	//获取当前农历		nltemp+="\n";		nltemp+=timestr;		qstrweek=ChineseAndEnglish(week[timeinfo->tm_wday]);		nltemp+=qstrweek;	//	nltemp=ChineseAndEnglish(nltemp.latin1());	}	QPen pen(date_color,1);	p.setPen(pen);	p.drawText( date_x, date_y,300, 240,date_flag,nltemp);	countor=timeinfo->tm_mday;//	p.drawText( date_x, date_y+date_size+10,100, 100,1,QString(timestr));	}int MyZKbMain::drawclock(QPainter &p , int & blt_x ,int & blt_y ,int & blt_w , int & blt_h){	{		QPen pen(dig_color,1);		p.setPen(pen);		char tmp[100];				if(dig_format)		//判断时间格式		{			sprintf (tmp, "%02d:%02d",timeinfo->tm_hour,timeinfo->tm_min);			p.drawText( dig_x, dig_y,300, 240,1,QString(tmp));		}		else			{				if(timeinfo->tm_hour < 12)					sprintf (tmp, "%02d:%02d AM",timeinfo->tm_hour,timeinfo->tm_min);				else					if(timeinfo->tm_hour > 12)						sprintf (tmp, "%02d:%02d PM",timeinfo->tm_hour-12,timeinfo->tm_min);						else							if(timeinfo->tm_hour == 12)								sprintf (tmp, "%02d:%02d PM",timeinfo->tm_hour,timeinfo->tm_min);											p.drawText( dig_x, dig_y,300, 240,1,QString(tmp));							}	}	QPen pen(sec_color,1);	// 设置颜色	int x,y;	SpeciOperation sop;		//旋转//	printf ("%4d-%02d-%02d %02d:%02d:%02d",1900+timeinfo->tm_year, 1+timeinfo->tm_mon,timeinfo->tm_mday,timeinfo->tm_hour,timeinfo->tm_min,timeinfo->tm_sec);		pen.setColor(hou_color);	//设置画笔颜色	pen.setWidth(hou_width);	//设置画笔宽	p.setPen(pen);	x=clk_center_x;	y=clk_center_y-hou_len;//	printf("%4.6f\n",timeinfo->tm_hour *30.0 + timeinfo->tm_min/2.0);	sop.rotate(timeinfo->tm_hour *30.0 + timeinfo->tm_min/2.3,clk_center_x,clk_center_y);//设置旋转角度	sop.Change(x,y,3);//旋转	p.drawLine(clk_center_x,clk_center_y,x,y);//绘制时针	pen.setColor(min_color);		pen.setWidth(min_width);		p.setPen(pen);	x=clk_center_x;	y=clk_center_y-min_len;	if(sec_width)	//判断是否有秒针		sop.rotate(timeinfo->tm_min*6.0 + timeinfo->tm_sec/13,clk_center_x,clk_center_y);	//有秒针则旋转角度加上秒的影响	else		sop.rotate(timeinfo->tm_min*6.0,clk_center_x,clk_center_y);	sop.Change(x,y,3);	//旋转	p.drawLine(clk_center_x,clk_center_y,x,y);//save min	clk_x_arr[1]=x;	//保存当前的min末端坐标	clk_y_arr[1]=y;		if(sec_width)		//如果要绘制秒针	{		pen.setColor(sec_color);		pen.setWidth(sec_width);		p.setPen(pen);		x=clk_center_x;		y=clk_center_y-sec_len;		sop.rotate(timeinfo->tm_sec*6.0,clk_center_x,clk_center_y);		sop.Change(x,y,3);		p.drawLine(clk_center_x,clk_center_y,x,y);//save sec		clk_x_arr[0]=x;	//保存当前sec末端坐标		clk_y_arr[0]=y;			////////////////以下计算出最小重绘面积//////////////////////////		int max_x(0),min_x(320),max_y(0),min_y(320);	//		for(int i=0;i<5;i++)				//找出最大和最小的坐标		{			if(clk_x_arr[i]>max_x)				max_x=clk_x_arr[i];			if(clk_y_arr[i]>max_y)				max_y=clk_y_arr[i];							if(clk_x_arr[i]<min_x)				min_x=clk_x_arr[i];			if(clk_y_arr[i]<min_y)				min_y=clk_y_arr[i];//			printf("clk_x_arr[%d]=%d\n",i,clk_x_arr[i]);		}			blt_x=min_x - min_width/2 -1;	//重绘的起始坐标		blt_y=min_y - min_width/2 -1;		blt_w=min_width+2+(max_x-min_x);	//重绘的宽		blt_h=min_width+2+(max_y-min_y);		clk_x_arr[2]=clk_x_arr[0];		//后两位保存上次的sec和min的坐标		clk_x_arr[3]=clk_x_arr[1];		clk_y_arr[2]=clk_y_arr[0];		clk_y_arr[3]=clk_y_arr[1];//		printf("min_x=%d  min_y=%d\n",min_x,min_y);	}	/////////////////////////////////////////////	//draw_dot	p.setBrush(dot_color);	p.setPen(dot_color);	p.drawEllipse(clk_center_x-dot_r,clk_center_y-dot_r,dot_r+dot_r,dot_r+dot_r);	//绘制模拟时钟中心		return 0;}void MyZKbMain::timerEvent(QTimerEvent* e)	//timer{	static int countor=0;	countor++;	static char num[20];	static bool flag_misscall=false;	time_t rawtime;	time ( &rawtime );	timeinfo = localtime ( &rawtime );	if(!flag_w_unlock && (countor %4)==0)	{		countor=0;		if( now_main_db_size <= pre_main_db_size)	//获取当前maindb的长度		{				now_main_db_size=get_main_db_size();			if( now_main_db_size < pre_main_db_size)			{				pre_main_db_size=	now_main_db_size ;			}		}		if(!flag_misscall)		{			if(missalert(0,num,0,0))				//获取是否有未接电话				flag_misscall=true;		}		if(flag_misscall)		{			if(now_main_db_size > pre_main_db_size)			{				sprintf(str_default,"未接来电:%s\n您可能有新短信",num);			}			else				sprintf(str_default,"您有未接来电:\n%s",num);		}		else			if(now_main_db_size > pre_main_db_size)			{				sprintf(str_default,"您可能有新短信");			}			else			{				sprintf(str_default,KEY_LOCKING_STR);			}	}		if(!sec_width)	{		char nowinfo[300];

⌨️ 快捷键说明

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