当前位置:首页 > 编程笔记 > 正文
已解决

C++ QT学习笔记

来自网友在路上 136836提问 提问时间:2023-09-20 17:24:22阅读次数: 36

最佳答案 问答题库368位专家为你答疑解惑

C++ QT学习笔记

信号和槽

// static QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, Functor functor);
connect(ui->actionQuit,&QAction::triggered,[=](){ this->close(); });

绘图

QPainter painter(this);
QPixmap pix;
pix.load(":/res/PlayLevelSceneBg.png");
painter.drawPixmap(0,0,this->width(),this->height(),pix);

音效

QSoundEffect *startSound=new QSoundEffect(this);
startSound->setSource(QUrl::fromLocalFile(":/res/TapButtonSound.wav"));
startSound->play();

菜单栏

//创建菜单栏
QMenuBar *bar=menuBar();
setMenuBar(bar);
QMenu* startMenu=bar->addMenu("开始");
QAction* quitAction= startMenu->addAction("退出");

自定义信号

#include <QMainWindow>
#include"playscene.h"class ChooseLevelScene : public QMainWindow
{Q_OBJECT
public:explicit ChooseLevelScene(QWidget *parent = nullptr);void paintEvent(QPaintEvent *event);PlayScene* play=NULL;
signals://写一个自定义信号,告诉主场景  点击了返回//只需要声明,不需要实现void chooseSceneBack();
};connect(backBtn,&MyPushButton::clicked,[=](){//返回主场景backSound->play();QTimer::singleShot(500,this,[=](){emit this->chooseSceneBack();//发送信号});
});chooseLevel=new ChooseLevelScene();
connect(chooseLevel,&ChooseLevelScene::chooseSceneBack,[=](){ //接收信号chooseLevel->setGeometry(this->geometry());chooseLevel->hide();this->show();
});

文字

QLabel* levelLabel=new QLabel();
levelLabel->setParent(this);
levelLabel->setFixedSize(levelBtn->width(),levelBtn->height());
levelLabel->setText(QString::number(i+1));
levelLabel->move((i%4)*70+25,(i/4)*70+130);//设置文字在Label中的对齐方式
levelLabel->setAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
levelLabel->setAttribute(Qt::WA_TransparentForMouseEvents);//设置字体
QLabel* label=new QLabel();
label->setParent(this);
QFont font;
font.setFamily("华文新魏");
font.setPointSize(20);
QString level_str=QString("Level:%1").arg(this->levelIndex);
label->setFont(font);
label->setText(level_str);
label->setGeometry(30,this->height()-60,120,50);

动画

//动画对象
QPropertyAnimation* animation=new QPropertyAnimation(this,"geometry");
//动画时间
animation->setDuration(200);
//开始位置和结束位置
if(isUp){animation->setStartValue(QRect(this->x(),this->y()+10,this->width(),this->height()));animation->setEndValue(QRect(this->x(),this->y(),this->width(),this->height()));
}
else{animation->setStartValue(QRect(this->x(),this->y(),this->width(),this->height()));animation->setEndValue(QRect(this->x(),this->y()+10,this->width(),this->height()));
}
//设置弹跳曲线
animation->setEasingCurve(QEasingCurve::OutBounce);
animation->start();

按钮

void MyPushButton::mousePressEvent(QMouseEvent *e){if(this->pressImgPath!=""){//切换图像QPixmap pix;bool res=pix.load(this->pressImgPath);if(!res){qDebug()<<"图片加载失败";return;}this->setFixedSize(pix.width(),pix.height());this->setStyleSheet("QPushButton{border:0px;}");this->setIcon(pix);this->setIconSize(QSize(pix.width(),pix.height()));}//让父类继续进行处理,相当于先拦截让函数先实现部分功能return QPushButton::mousePressEvent(e);
}// 胜利过后,不可以点击按钮,其实也就是覆盖了父类按钮点击事件
void MyCoin::mousePressEvent(QMouseEvent *e){if(isAnimation||this->isWin){return;}return QPushButton::mousePressEvent(e);
}

计时器

timer1=new QTimer(this);connect(timer1,&QTimer::timeout,[=](){QPixmap pix;QString str=QString(":/res/Coin000%1.png").arg(this->min_N++);pix.load(str);this->setFixedSize(pix.width(),pix.height());this->setStyleSheet("QPushButton{border:0px;}");this->setIcon(pix);this->setIconSize(QSize(pix.width(),pix.height()));if(this->min_N>this->max_N){this->min_N=1;isAnimation=false;timer1->stop();}
});
if(this->flag){isAnimation=true;timer1->start(30);this->flag=false;
}

窗口偏移

解决方案:

chooseLevel->setGeometry(this->geometry());
this->setGeometry(play->geometry());

案例

金币翻转小游戏案例

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"C++ QT学习笔记":http://eshow365.cn/6-10117-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!