#include
"mainwidget.h"
#include <QPushButton>
#include <QDebug>
MainWidget::MainWidget(QWidget *
parent)
: QWidget(parent)
{
// QPushButton btn1;
// QPushButton btn2;
btn1.setParent(this);
btn1.setText("colse");
btn1.move(100,
100);
btn2 =
new QPushButton(
this);
//指针没有空间,是需要动态的对其进行空间的分配
btn2 ->setParent(
this);
btn2 ->setText(
" 3 2 1 ");
connect(&btn1,&QPushButton::pressed,
this ,&
MainWidget::close);
/* 对connect的说明:
* &btn1 :信号发出着,指针类型
* &QPushButton::pressed:处理信号, &发送者的类名::信号名字
* this:信号接收者
* &MainWidget::close: 槽函数,信号处理函数 &接收者的类名::槽函数名字
*/
/*自定义槽,说的更加通俗一点,就是普通函数的用法
* QT5:可以是 任意的成员函数(常用这种方法,直接写成该类的成员函数),普通全局函数,静态函数 都可以是槽函数
* 槽函数需要和信号一致(参数,返回值)
* 由于信号都是没有返回值,所以,槽函数一定没有返回值
*/
//释放按钮btn2实现里面的文本内容发生改变
connect(btn2,&QPushButton::released,
this,&MainWidget::mySlot);
//在写自定义信号槽函数的时候,一定要看发送信号函数的类型,这里released信号的函数是:void QAbstractButton::released()
//即released函数没有参数,也没有返回值,槽函数需要和信号一致,也没有参数和返回值
//释放按钮btn2隐藏按钮btn1
connect(btn2,&QPushButton::released,&btn1,&
QPushButton::hide);
//互相切换窗口的小游戏
this->setFixedSize(
360,
480);
this ->setWindowTitle(
"苍老师");
btn3.setParent(this);
btn3.setText("换到波老师");
btn3.move(50,
50);
//显示子窗口
// w.show();
//点击按钮btn3实现主窗口隐藏,子窗口显示
connect(&btn3,&QPushButton::released,
this,&
MainWidget::changeWin);
//处理子窗口发送过来的信号
void (SubWidget::*funSognal)() = &
SubWidget::mySignal;
connect(&w,funSognal,
this,&
MainWidget::dealWin);
//处理子窗口发送过来的信号(有参数)
void (SubWidget::*testSognal)(
int ,QString) = &
SubWidget::mySignal;
connect(&w,testSognal,
this,&
MainWidget::subSlot);
//Lambda表达式,匿名函数对象
//C++11新增的新特性, 项目文件添加:CONFIG +=C++11
//QT配合信号一起使用, 非常的方便
QPushButton *btn6 =
new QPushButton(
this);
//这里就不能使用普通的变量,而要使用指针变量,不然是局部变量会释放
btn6->setText(
"lambda表达式");
btn6->move(
150,
150);
int a=
1,b=
100;
//这里的的=的意思是:把外部所有的局部变量、类中所有成员以值传递方式传递进来,唯一不足的是其传递进来的值以只读的方式进来
//this:类中所有成员以值传递方式传递进来
//&:把外部所有的局部变量 引用符号(慎用:在有类似动态创建空间的时候,值容易被破坏)
//如果在大括号内部想对传递进来的值进行修改,需要在()后添加mutable关键字
connect(btn6,&QPushButton::released,[=
]()mutable {
qDebug()<<
"1231213213231213";
qDebug()<<a<<
b;
a=
10;
});
//当使用有参数的信号函数时,例如使用clicked;
connect(btn6,&QPushButton::clicked,[=](
bool isChecked) {
qDebug()<<
isChecked;
});
}
//自定义槽函数的实现
void MainWidget::mySlot()
{
btn2->setText(
"I LOVE YOU");
}
void MainWidget::changeWin()
{
//子窗口显示,
w.show();
//本窗口隐藏
this ->
hide();
}
void MainWidget::dealWin()
{
//子窗口隐藏
w.hide();
//本窗口显示
this->
show();
}
void MainWidget::subSlot(
int a,QString str)
{
qDebug()<<a<<
str;
}
MainWidget::~
MainWidget()
{
}
转载于:https://www.cnblogs.com/doker/p/11026855.html