作者:手机用户2502880437 | 来源:互联网 | 2023-07-21 11:43
一、设计登录主页面
0.添加资源文件
将所需要的图片、音频添加到资源文件中
1.设置窗口(标题、图标、背景)
设置窗口属性
//1.添加资源文件//2.指定窗口大小--固定大小this->setFixedSize(900,600);//3.设置窗口左上角图标this->setWindowIcon(QIcon(":/resour/04.png"));//4.设置窗口标题this->setWindowTitle("姬霓太美");//5.加载背景图片--重写画图事件函数//详见绘图事件函数中//6.在ui文件中添加工具栏,并将其他无用部分删除
加载背景图片和游戏名称图片
//重写绘图函数--声明作用域,不然会被编译为全局函数
//头文件--
void newload::paintEvent(QPaintEvent*)
{//1.创建一个画家对象QPainter painter1(this); //指定父亲//2.创建pixmap类型的对象,用于加载背景图片QPixmap pixmap1;//3.利用pixmap1加载背景图片pixmap1.load(":/resour/01.jpg");//4.利用画家将pixmap1加载的背景图画出来//注意drawpixmap的参数painter1.drawPixmap(0,0,this->width(),this->height(),pixmap1);//5.利用pixmap加载《游戏名》图片pixmap1.load(":/resour/06.png"); //URL:互联网上标准资源的唯一地址//6.改变图片大小//scaled:缩放、规模pixmap1=pixmap1.scaled(pixmap1.width()*0.4,pixmap1.height()*0.4);//7.将 游戏名 的图片画出来painter1.drawPixmap(20,33,pixmap1);}
2.自定义按钮类
目的是:按下按钮时,有一个弹动的效果
1.自定义按钮类:mybutton,继承于QPushButton,具有父类的一些属性,也有自己的特有属性
2.自己编写构造函数,第一个参数是未点击按钮图片时的路径,第二个是点击按钮时图片的路径
3.有两个成员函数保存图片路径,加载函数时一些特殊的设定
1.重写mybutton类构造函数
头文件:
//重写构造函数//explicit mybutton(QWidget *parent = nullptr);//注意第二个参数为默认参数,实现和声明只需要有一个说明即可mybutton(QString normalimg,QString pressimg = "");//两个成员函数保存图片路径QString normalimgpath;QString pressimgpath;
cpp文件:
mybutton::mybutton(QString normalimg, QString pressimg)
{//创建一个Pixmap,更好的显示图片QPixmap pixmap1;//保存输入的路径normalimgpath = normalimg;pressimgpath = pressimg;//加载默认显示的图片int pixnum = pixmap1.load(normalimgpath); //函数返回值为bool//如果加载失败返回false,提示加载失败if(!pixnum){//此时的this,指的是mybuttonQString pixstr = QString("%1 图片加载失败").arg(this->normalimgpath);qDebug()<setFixedSize(pixmap1.width(),pixmap1.height());//设置不规则图片格式//边界--0px---透明背景this->setStyleSheet("QPushButton{border:0px;}");//设置图片:给按钮添加图片this->setIcon(QIcon(":/resour/05.png"));//设置图片大小this->setIconSize(QSize(pixmap1.width(),pixmap1.height()));//利用画家画出来//在主窗口}
2.主窗口创建 开始游戏 按钮
暂时还没有弹动的功能
//7.创建一个自定义类型的按钮mybutton* mybutton1 = new mybutton(":/resour/05.png");//将按钮添加到对象树上mybutton1->setParent(this);//移动自定义按钮的位置mybutton1->move(this->width()*0.5-mybutton1->width()*0.5,this->height()*0.7);
3.开始按钮 弹跳效果
3.1按压动画
需要添加动画类------
//按压动画
void mybutton::zoom1()
{//创建一个动画类指针对象,第一个参数是目标控件,第二个参数是动画方式geometry:几何QPropertyAnimation* animation1 = new QPropertyAnimation(this,"geometry");//创建动画的起始位置//函数参数:起始位置x值、y值、长、宽animation1->setStartValue(QRect(this->x(),this->y(),this->width(),this->height()));//创建动画结束的位置//结束位置x值、y值、长、宽animation1->setEndValue(QRect(this->x(),this->y()+10,this->width(),this->height()));//设置动画时间animation1->setDuration(200);//设置动画轨迹//easing:减轻、纾解//curve:曲线、弯线//variant:变量、变化、变种 bounce:弹性、弹跳、反弹animation1->setEasingCurve(QEasingCurve::OutBounce);//启动动画animation1->start();
}
3.2上弹动画
与按下动画类似
3.3组合
采用信号和槽的机制,使用 lambda 表达式的技术来实现
//测试一下connect(mybutton1,&QPushButton::clicked,[=](){//调试一下qDebug()<<"点击了按钮";//property:所有物、性能、财产//animation:活力、生气、动画片、动画制作//开始按钮执行动画//函数由自定义按钮提供//按下的动画mybutton1->zoom1();//弹起动画mybutton1->zoom2();//有一个小bug,快速连续按按钮,按钮就掉下去了});
二、切换游戏界面
2.1最核心的逻辑
1.创建一个新的类
2.在当前类里存放一个新类的指针
3.触发事件,隐藏该类,显示新类
//需要有一个延时的效果QTimer::singleShot(500,this,[=](){//进入新页面//该类隐藏this->hide();//创建一个新类newpage* newpage1 = new newpage;//显示新类newpage1->show();});
2.2新类的设计问题
大部分的设计与登录界面相类似
这里采用代码的方式来生成工具栏
//代码创建菜单栏QMenuBar* bar1 = new QMenuBar();//将菜单栏添加到对象树中this->setMenuBar(bar1);//创建具体菜单QMenu* menu1 = bar1->addMenu("开始");//创建菜单子项QAction* quit1 = menu1->addAction("退出游戏");//退出游戏connect(quit1,&QAction::triggered,this,[=](){//关闭窗口this->close();});