QT
一、按钮
1.效果
2.代码
#include<QPushButton>//头文件
myWidget::myWidget(QWidget *parent)
: QWidget(parent)
{
//方法1
QPushButton *btn=new QPushButton;
//btn->show();//以顶层方式显示
btn->setParent(this);//在myWidget窗口中
btn->setText("按钮");//显示文本
//方法2
QPushButton * 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从入门到实战完整版|传智教育。
如有错误,欢迎指出。