> 文章列表 > QT学习笔记(持续更新)

QT学习笔记(持续更新)

QT学习笔记(持续更新)

QT


一、按钮

1.效果

在这里插入图片描述

2.代码

#include<QPushButton>//头文件myWidget::myWidget(QWidget *parent): QWidget(parent)
{//方法1QPushButton *btn=new QPushButton;//btn->show();//以顶层方式显示btn->setParent(this);//在myWidget窗口中btn->setText("按钮");//显示文本//方法2QPushButton * btn2=new QPushButton("按钮2",this);btn2->move(100,100);//移动按钮resize(600,400);//重置按钮setWindowTitle("窗口");//设置窗口标题setFixedSize(600,400);//设置窗口固定大小//参数:信号发送者  发送的信号(函数的地址) 信号接收者  处理的槽函数(函数地址)   connect(btn,&QPushButton::clicked,this,&QWidget::close);//功能:点击btn按钮关闭窗口}

二、自定义信号和槽

1.自定义信号: 写在signals下,void,需要声明,不需要实现,可以有参数,可重载。
2.槽: 写在public下,void,需要声明,需要实现,可有参数,可发生重载。
3.断开信号: disconnect
**4.emit:**使用emit关键字发送信号
5.示例关键代码如下:
1.widget.cpp

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//创建对象this->zt=new Teacher(this);this->st=new Student(this);//不带参数自定义信号和槽//连接// connect(zt,&Teacher::hu,st,&Student::treat);//调用函数// classIsOver();//带参数//函数指针-》函数地址void(Teacher::*ts)(QString)=&Teacher::xk;void(Student::*ss)(QString)=&Student::treat;connect(zt,ts,st,ss);classIsOver();
}void Widget::classIsOver()
{//触发信号//emit zt->xk();emit zt->xk("计算机作业");
}

2.widget.h

#include <QWidget>
#include"teacher.h"
#include"student.h"class Widget : public QWidget{Q_OBJECT
public:Widget(QWidget *parent = nullptr);~Widget();
private:Ui::Widget *ui;Teacher *zt;Student *st;void classIsOver();
};

3.student.cpp


#include "student.h"
#include<qdebug>
void Student::treat()
{qDebug()<<"下课";
}
void Student::treat(QString foodName)
{//显示布置“foodName的内容”// qDebug()<<"布置"<<foodName;qDebug()<<"布置"<<foodName.toUtf8().data();//QString ->chat *:先转成QByteArray再转chat*,消“”
}

4.teacher.h和student.h

class Teacher : public QObject
{Q_OBJECT
public:explicit Teacher(QObject *parent = nullptr);
signals://自定义信号,void,需要声明,不需要实现,可以有参数,可以重载void xk();void xk(QString foodName);};class Student : public QObject
{Q_OBJECT
public:explicit Student(QObject *parent = nullptr);//槽函数:void,需要声明,需要实现,可有参数,可发生重载void treat();void treat(QString foodName);signals:};

6.效果图:
在这里插入图片描述

三、Lambda表达式

1.表达式

(1) [函数对象参数] (操作符重载函数参数) mutable->返回值{函数体}
(2) [] () {}()

2.函数对象参数

(1)空
(2)= : 值传递,所在作用范围内所有可见局部变量。
(3)&: 引用传递方式,所在作用范围内所有可见局部变量。
(4)this: 所在类中成员变量。
(5)a: 将a按值进行传递。
(6)&a: 将a按引用进行传递。

3.示例:

 //将“下课”按钮-》"lambda"按钮[=](){btn->setText("lambda");}();
//演示将(5)a按值传递QPushButton *btn2=new QPushButton("a",this);this->resize(600,400);btn2->move(100,100);[btn2](){btn2->setText("lambda2");//btn->setText("lambda");//’btn‘ is not captured}();
//输出 ret=100
int ret=[]()->int{return 100;}();
qDebug()<<"ret="<<ret;
 //利用lambda表达式,实现点击按钮,关闭窗口QPushButton *btn3=new QPushButton;btn3->setText("关闭");btn3->move(100,0);btn3->setParent(this);connect(btn3,&QPushButton::clicked,this,[=](){this->close();emit zt->xk("计算机");});//结果:点击”关闭“按钮,窗口关闭并输出(布置 计算机)

内容来自:b站最新QT从入门到实战完整版|传智教育。
如有错误,欢迎指出。