C++ QT学习笔记

C++ QT学习笔记

信号和槽

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

绘图

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

音效

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

菜单栏

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

自定义信号

cpp 复制代码
#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();
});

文字

cpp 复制代码
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);

动画

cpp 复制代码
//动画对象
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();

按钮

cpp 复制代码
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);
}

计时器

cpp 复制代码
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;
}

窗口偏移

解决方案:

cpp 复制代码
chooseLevel->setGeometry(this->geometry());
this->setGeometry(play->geometry());

案例

金币翻转小游戏案例

相关推荐
十年一梦实验室12 分钟前
【C++】sophus : sim_details.hpp 实现了矩阵函数 W、其导数,以及其逆 (十七)
开发语言·c++·线性代数·矩阵
taoyong00115 分钟前
代码随想录算法训练营第十一天-239.滑动窗口最大值
c++·算法
这是我5822 分钟前
C++打小怪游戏
c++·其他·游戏·visual studio·小怪·大型·怪物
fpcc29 分钟前
跟我学c++中级篇——C++中的缓存利用
c++·缓存
呆萌很1 小时前
C++ 集合 list 使用
c++
诚丞成2 小时前
计算世界之安生:C++继承的文水和智慧(上)
开发语言·c++
东风吹柳3 小时前
观察者模式(sigslot in C++)
c++·观察者模式·信号槽·sigslot
A懿轩A3 小时前
C/C++ 数据结构与算法【栈和队列】 栈+队列详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·栈和队列
云空3 小时前
《QT 5.14.1 搭建 opencv 环境全攻略》
开发语言·qt·opencv
大胆飞猪4 小时前
C++9--前置++和后置++重载,const,日期类的实现(对前几篇知识点的应用)
c++