#include "mainwidget.h"
#include <QPushButton>
#include <QDebug>//打印
MainWidget::MainWidget(QWidget *parent)
: QWidget(parent)
{
b1.setParent(this);
b1.setText("close");
b1.move(200,190);
b2 = new QPushButton(this); //如果创建的
b2->setText("选择");
b2->move(200,210);
connect(&b1,&QPushButton::pressed,this,&MainWidget::close);
/*&b1 : 信号发出者,指针类型
* &QPuhButton::pressed 处理的信号, &发送者的类名::信号名字
* this:信号接收者
* &MainWidget::close; 槽函数,信号处理函数 &接收者类名::槽函数名字
*/
/* 自定义槽,普通函数的用法
* QT5:任意的成员函数,普通全局函数,静态函数
* 槽函数需要和信号一致(参数,返回值)
* 由于信号都是没有返回值的,所以,槽函数一定没有返回值
* 信号可以重载
* 优点,松散耦合
*/
connect(b2,&QPushButton::released,this,&MainWidget::mySlot);
connect(b2,&QPushButton::released,&b1,&QPushButton::hide);
/* 信号:短信
* 槽函数:接收短信的手机
*/
setWindowTitle("智能地铁换乘系统0.1");
//设置父亲
b3.setParent(this);
//设置文本
b3.setText("切换");
//设置位置
b3.move(200,230);
connect(&b3,&QPushButton::released,this,&MainWidget::changewin);
//w.show();
//处理子窗口的信号
void (SubWidget::*winSignal)() = &SubWidget::mySignal;
connect(&w,winSignal,this,&MainWidget::dealSub);
void (SubWidget::*stringSignal)(int,QString) = &SubWidget::mySignal;
connect(&w,stringSignal,this,&MainWidget::dealSlot);
setFixedSize(600,400);//设置固定窗口大小
resize(400,300);
//disconnect();断开信号
//1.信号可以连接信号
//2.一个信号可以连接多个槽
//3.多个信号可以连接同一个槽函数
//4.信号和槽的参数类型要一一对应
//5.信号的参数可以多于槽函数参数
/**************************lambda表达式*****************************/
// [=]按值传递 ,加上mutable修饰符后,可以修改按值传递进来的拷贝(注意是能修改拷贝,而不是值本身)
QPushButton * myBtn = new QPushButton("来点我",this);
QPushButton * myBtn2 = new QPushButton("再点我试试",this);
myBtn->move(240,250);
myBtn2->move(260,200);
int m = 10;
connect(myBtn,&QPushButton::clicked,this,[m]()mutable{m=100+10;qDebug()<<m;});
connect(myBtn2,&QPushButton::clicked,this,[=](){qDebug() << m;});
qDebug() << m;
/***************************************************************/
//用做返回值
int ret = []()->int{return 1000;}();
qDebug()<< "ret="<< ret;
}
void MainWidget::dealSlot(int a,QString str)
{
//QString -> char * 先转成QByteArray ( .toUtf8() ) 再转成char *( .data() )
qDebug() << a << str.toUtf8().data();
//w.hide();
//show();
}
MainWidget::~MainWidget()
{
}
void MainWidget::changewin()
{
w.show();
this->hide();
}
void MainWidget::dealSub()
{
w.hide();
this->show();
}
void MainWidget::mySlot()
{
b2->setText("嘿嘿嘿");
}
QT 信号与槽
最新推荐文章于 2024-05-21 08:53:15 发布