QT学习笔记---day1

QT

QPushButton

QT学习笔记---day1_第1张图片

QT中的对象树

在这里插入图片描述

QT中的坐标系

左上角为(0,0)点

QT中的信号槽

案例:点击按钮 关闭窗口

connect(信号发送者,发送的信号,信号接受者,处理的槽函数)

在这里插入图片描述

自定义信号和槽

头文件——>自定义信号写到signal下

connect(老师,老师饿了(信号),学生,请客(槽函数))

teacher类头文件:

class Teacher : public QObject
{
    Q_OBJECT
public:
    explicit Teacher(QObject *parent = nullptr);

signals:
    //自定义信号 写到signals下
    //返回值void
    //只需要声明 可以有参数 重载
    void hungry();
    void hungry(QString foodname);
};

student类头文件:

class Student : public QObject
{
    Q_OBJECT
public:
    explicit Student(QObject *parent = nullptr);

signals:

public slots:
    //自定义槽函数写到这里 5.0版本一上 可以写成全局函数或者pubic作用域下 或者lamada表达式
    //返回值void
    //需要声明+实现
    //可以重载
    void treat();
    void treat(QString fooname);

};

 this->tc=new Teacher();
    this->st=new Student();
    //连接信号和槽
    connect(tc,&Teacher::hungry,st,&Student::treat);
    classOver();

void Widget::classOver()
{
    //触发自定义信号
    emit this->tc->hungry();
}

QString(打印出来会变双引号)转换为char*。

通过.toUtf8转为QByteArray 通过.data转为char*。


当信号和槽发生重载时候,需要利用函数指针明确指出函数地址

 //连接有参信号和槽
    //函数指针可以指向函数地址
    void(Teacher::*teacherSignal)(QString)=&Teacher::hungry;
    void(Student::*studentSlot)(QString)=&Student::treat;

    connect(tc,teacherSignal,st,studentSlot);
    classOver();

信号和槽拓展

1.信号可以连接信号

QPushButton *btn=new QPushButton("this",this);
void(Teacher::*teacherSignal2)()=&Teacher::hungry;
void(Student::*studentSlot2)()=&Student::treat;
    //信号是可以连接信号的
    connect(tc,teacherSignal2,st,studentSlot2);

2.可以断开信号和槽(disconnect)

3.一个信号可以响应多个槽函数

4.多个信号可以连接同一槽函数

信号参数可以多 槽可以不接受,参数类型要一一对应。

QT4版本的信号槽写法

Lambda表达式

{}组成

[]中可以加= & a &a 推荐使用=

()里写形参列表

{}函数体实现

mutabl可以修改按值传递进来的拷贝

->type 代表lambda表达式返回值类型

int num=[=]()->int{
        return 1000;
    }();

//当进行信号和槽连接时 控件会进入一个锁的状态(只读)

你可能感兴趣的:(cpp,qt,c++)