C++QT



C++11新特性

nullptr                         空指针

auto                           自动类型

Lamda表达式            匿名函数       

for each                     新循环遍历方式

Lamda表达式定义函数语法:

[可访问外部变量](参数)->返回值{函数体}

[变量名1,变量名2.....](){}        指定部分变量访问

 [=](){}                                       值传递形式捕获外部所有变量 (内部无法改变实际变量)   

 [&](){}                                       引用形式捕获外部所有变量     (内部可以改变实际变量) 




一、常用按钮控件

1.创建 QPushButton *btn = new QPushButton;

2.设置父亲 setParent(); 

3.设置文本 setText();

4.设置窗口大小 resize();

5.设置标题 setWindowTitle();

6.设置固定大小 setFixedSize();

7.设置位置 move();



二、QT对象树介绍

对象树:QT中的类的继承关系,有一定程度上简化了对象释放操作。由QT的QObject类派生出来的类,无需手动释放堆内存 添加到QObject或QObject派生类的对象的子成员时,也无需手动释放,程序结束时QT会自动检测对象树的对象 ,释放对象前,先释放子对象,从而一层一层的最终释放完毕。​​​​​

//    设置一个按钮
//    鼠标  按下  打印申闹被打了
//    鼠标  抬起  打印申闹反抗了
    auto btnMouse = new QPushButton("申闹",this);
    btnMouse->move(300,0);
    //当按钮点击时
    connect(btnMouse,&QPushButton::pressed,[]()->void{
        qDebug()<<"老鼠被打了";
    });
    //抬起时
    connect(btnMouse,&QPushButton::released,[]()->void{
         qDebug()<<"申闹反抗了";
    });

三、信号(Signal)和槽(Slot)

信号和槽:是QT框架引以为豪的东西 实际上就是观察者模式,一种简易方式。
使用connect函数,可以为信号以及槽建立好连接,当信号广播(触发)时,槽作出相应的处理。
信号来自于被观察者 槽来自于观察者

用法1:connect(被观察者,信号,观察者,槽);

用法2:connect(被观察者,信号,Lamda表达式匿名函数);

用法3:connect(被观察者,SIGNAL(信号函数),观察者,SLOT(槽函数));//老版本用法

Signal(信号):函数声明,无需实现。系统大多数类,都内置了信号,开发者也可以自定义信号。

Slot(槽):本质就是个函数,一般是类的成员函数。有声明且有实现体。系统大多数类,都内置了槽,开发者也可以自定义槽。

代码示例:

    //最大化按钮(被观察者)
    auto btnMax = new QPushButton("最大化",this);
    //this窗口 观察者
    //建立信号和槽连接
    connect(btnMax,&QPushButton::clicked,this,&QWidget::showMaximized);
    /*老版本QT4以前,信号和槽的绑定方式*/
    auto btnMaxOld = new QPushButton("Old最大化",this);
    connect(btnMaxOld,SIGNAL(clicked()),this,SLOT(showMaximized()));

四.自定义信号和槽

QT内置了大量的信号和槽,也支持用户自定义信号和槽
自定义槽:
    1.有函数声明且有实现
    2.返回值类型为void
    3.槽函数 可以带参 可以重载 (槽函数实参 从信号而来)
自定义信号:
    1.写在signals:下
    2.只需声明  无需实现
    3.返回值为void
    4.可以带参  可以重载
    5.emit 可触发信号
自定义信号和槽特点:
    1.一个信号可以被多个槽绑定
    2.同一个槽函数可以绑定多个信号
    3.信号和槽的函数参数列表需一一对应
    4.信号的参数表可以多于槽函数的参数表,反之不可以
    5.信号可以绑定信号
信号和槽 断开连接:
disconnect();断开连接
connect();连接

class Boss : public QWidget
{
    Q_OBJECT
public:
    //explicit关键字 修饰函数 参数 无法自动转换类型
    explicit Boss(QString _name,int _exe,QWidget *parent = nullptr);
    QString name;//名字
    int experience;//经验

signals://信号定义
//自定义信号
    void BossDeadSignal();//定义死亡信号
    void BossDeadSignal(int);//定义死亡信号 重载
public slots:
    //自定义槽函数
    void BossDeadSlot();//boss死亡槽函数
    void BossDeadSlot(int);//boss死亡槽函数  重载
};
    //重载后无参 连接无参的信号和槽
    void (Boss::*deadSignalN)() = &Boss::BossDeadSignal;//信号指针
    void (Boss::*bossDeadSlotN)() = &Boss::BossDeadSlot;//槽指针
    connect(mboss,deadSignalN,mboss,bossDeadSlotN);//死亡信号触发后 死亡槽函数处理打印

    //boss死亡信号触发后,角色获得经验
    mrole = new Role;
    //重载后无参  连接带参的信号和槽
    void (Boss::*deadSignalY)(int) = &Boss::BossDeadSignal;//信号指针
    void (Role::*getExeY)(int) = &Role::GetExe;//槽指针
    connect(mboss,deadSignalY,mrole,getExeY);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牵猫散步的鱼儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值