若返回按钮有鼠标按下和释放的效果,就需要重写函数,并且要在最后将事件抛出给父类,主要代码如下
//重写鼠标按下
void MyPushButton::mousePressEvent(QMouseEvent *e)
{
//如果按下图片路径不为空
if(this->pressImgPath!="")
{
//QPixmap加载图标
QPixmap pix;
bool ret = pix.load(pressImgPath);
if(!ret)
{
QString str = QString("图片加载失败 %1").arg(pressImgPath);
qDebug()<<str;
return;
}
//设置大小
this->setFixedSize(pix.width(),pix.height());
//设置不规则图片样式
this->setStyleSheet("QPushButton{border:0}");
//设置图标
this->setIcon(pix);
//设置图标大小
this->setIconSize(QSize(pix.width(),pix.height()));
}
//点击的响应事件抛给父类
QPushButton::mousePressEvent(e);
}
//重写鼠标释放
void MyPushButton::mouseReleaseEvent(QMouseEvent *e)
{
//如果按下图片路径不为空
if(this->pressImgPath!="")
{
//QPixmap加载图标
QPixmap pix;
bool ret = pix.load(this->normalImgPath);
if(!ret)
{
QString str = QString("图片加载失败 %1").arg(normalImgPath);
qDebug()<<str;
return;
}
//设置大小
this->setFixedSize(pix.width(),pix.height());
//设置不规则图片样式
this->setStyleSheet("QPushButton{border:0}");
//设置图标
this->setIcon(pix);
//设置图标大小
this->setIconSize(QSize(pix.width(),pix.height()));
}
//点击的响应事件抛给父类
QPushButton::mouseReleaseEvent(e);
}
对于场景的切换,一定要分清主次关系,在主场景的头文件中要包含次场景的维护指针,且在主场景中创建出来,然后需要在次场景中写一个信号,在点击返回按钮时emit这个信号。(建议在返回信号时加上延时,否则给按钮做的动态展示无法显示)同时在主场景中持续监听这个信号,若收到信号就将次场景隐藏,主场景显示即可。主要代码如下
connect(backBtn,&MyPushButton::clicked,[=](){
//延时发送信号
QTimer::singleShot(500,this,[=](){
emit this->chooseSceneBack();
});
});
//监听选择关卡场景中的 返回按钮自定义信号
connect(chooseScene,&ChooseLevelScene::chooseSceneBack,[=](){
chooseScene->hide();
this->show();
});