QT总结笔记1--基本概念、信号和槽

1 篇文章 0 订阅

1.1模块功能

在这里插入图片描述

1.2命名规范:

类名 首字母大写,单词和单词之间首字母大写
函数名 变量名称 首字母小写,单词和单词之间首字母大写

1.3对象树

用于堆区内存自动回收。当创建的对象在堆区时候,如果指定的父亲是 QObject 派生下来的类或者 QObject子类派生下来的类,可以不用管理释放的操作,将对象会放入到对象树中。

在创建 QObject 对象或QObject子类派生类的对象时,可以提供一个其父对象,创建这个 对象时会自动添加到其父对象的 children()列表。当父对象析构的时候,这个列表中的所有对象也会被析构。

1.4QT中的坐标系

在这里插入图片描述

1.5信号与槽

  • 一个信号可以连接多个槽

  • 多个信号也可以连接同一个槽函数

  • 信号和槽的参数和类型必须对应

  • 信号的参数个数可以多于槽的参数个数

  • 信号可以连接信号

  • 一个信号可以连接多个槽函数

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

  • 信号和槽函数的参数必须类型一一对应

  • 信号的参数个数可以多于槽函数的参数个数,反之不行

  • 信号与槽可以断开连接disconnect()

连接函数connect()
在这里插入图片描述

//1.信号发送者;2.发送的信号;3.信号的接收者;接收的槽函数
connect(te,&Teacher::hungry,st,&Student::treat);
disconnect(te,&Teacher::hungry,st,&Student::treat);

优点:松散耦合

自定义信号:
1.写到 signals下
2.返回 void
3.需要声明,不需要实现
4.可以有参数,可以重载

自定义槽:
1.写到 public slot下 或者 public 或者全局函数
2.返回void
3.需要声明,也需要实现
4.可以有参数,可以重载

自定义信号与槽

//在老师类中定义信号
class Teacher : public QObject
{
    Q_OBJECT
public:
    explicit Teacher(QObject *parent = nullptr);

signals:
    //自定义信号 写到signals下
    //返回值是void ,只需要声明,不需要实现
    //可以有参数,可以重载
    void hungry();

    void hungry(QString foodName);

};

//在学生类中定义槽
class Student : public QObject
{
    Q_OBJECT
public:
    explicit Student(QObject *parent = nullptr);

public slots:
    //早期qt版本 必须要写到public slots,高级版本可以写到 public或者全局下
    //返回值void ,需要声明,也需要实现
    //可以有参数,可以发生重载
    void treat();
    void treat(QString foodName);

signals:
};

void Student::treat()
{
    qDebug() << "老师请客吃好吃的!";
}

void Student::treat(QString foodName)
{
//    qDebug() << "老师请客,吃:"<<foodName;
    //QString->Utf8->*char类型,则可以解决输出带“”
    qDebug() << "老师请客,吃:"<<foodName.toUtf8().data();
}
class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void on_close_clicked();

private:
    Ui::Widget *ui;

    Teacher *te;
    Student *st;

    void classIsOver();
};

//调用
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    this->te=new Teacher(this);
    this->st=new Student(this);
    //这里的this是给创建的对象指定父,将该对象加入父对象树,实现对象的自动释放

    QPushButton *btn=new QPushButton("下课铃响了",this);
    this->resize(600,400);


    void(Teacher::*teacherSigna2)(QString) = &Teacher::hungry; //告诉他这个信号是有参的
    void(Student::*StudenTreat2)(QString) = &Student::treat;
    connect(te,teacherSigna2,st,StudenTreat2);
    classIsOver();


    //1.不发生重载时信号与槽连接
//    connect(te,&Teacher::hungry,st,&Student::treat);

    //2.发生重载时信号与槽通过函数指针连接
    void(Teacher::*teacherSigna)(void) = &Teacher::hungry; //告诉他这个信号是有参的
    void(Student::*StudenTreat)(void) = &Student::treat;
    connect(te,teacherSigna,st,StudenTreat);
    classIsOver();

//    //3.信号连接槽,槽中触发的信号在连接槽
//    connect(btn,&QPushButton::clicked,this,&Widget::classIsOver);

    //4.信号连接信号,由第二个信号连接槽
    connect(btn,&QPushButton::clicked,te,teacherSigna);

//    //5.断开连接
//    disconnect(btn,&QPushButton::clicked,te,teacherSigna);

    //6.QT4中写法(QT4用函数名字符串匹配,对类型不匹配,QT5用函数指针地址匹配,)
    connect(btn,SIGNAL(clicked()),te,SIGNAL(hungry()));

    //7.Lambda表达式,实现一对多
    connect(btn,&QPushButton::clicked,[=](){
//                this->close();
//                emit te->hungry("宫保鸡丁");
                btn->setText("俺改名了");
            });


//    qDebug()<<"hhkkkk";

}


void Widget::classIsOver()
{
//    emit te->hungry();

    emit te->hungry("宫保鸡丁");
}
/*输出
老师请客吃好吃的!
*/

补充知识:Lambda表达式
Lambda表达式用于定义并创建匿名的函数对象,以简化编程工作。

  • Lambda表达式函数声明 {}
    [函数对象参数](操作符重载函数参数)mutable ->返回值{函数体}
    • [] 不可使用任何局部变量
    • [=] 允许使用局部变量,通过值传递
    • [&] 允许使用局部变量,通过应用传递
    • [变量a] 允许变量a使用值传递
    • mutable 可修改值传递进来的参数,虽然还是局部变量,如[变量m]()mutable{m+=100;打印}; 不加mutable会报错
    • ->类型 为匿名函数返回值,如int ret =[]()->int{return 1000}();
    • Lambda表达式函数的调用 {}()
    • 这里最常见的={}使用方式

MainWindow

  • 菜单栏 QMenuBar
    在这里插入图片描述
  • 工具栏 QToolBar
    在这里插入图片描述
  • 状态栏 QStatusBar
    在这里插入图片描述
  • 铆接部件 QDockWidget(浮动窗口)
  • 中心部件,如 QTextEdit
  • 资源文件,实现按钮的的图标显示
  • 对话框QDialog
    分为模态对话框(阻塞)和非模态对话框(非阻塞)
    消息对话框(模态对话框)
    • 错误对话框 QMessageBox::critical(this,“critical”,“错误”);
    • 信息对话框 information
    • 提问对话框 question
    • 警告对话框 warning
    • 颜色对话框 QColorDialog
    • 文件对话框 QFileDialog
    • 字体对话框 QFontDialog

更新中。。。

https://www.bilibili.com/video/BV1g4411H78N?p=10&spm_id_from=pageDriver&vd_source=07c19be7e433a8cd75d9808899f4c9d9

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值