信号,首先看下什么是事件和信号?
以QPushButton的单机事件为例
鼠标按下事件会触发mousePressEvent事件,然后QPushButton会发射pressed信号
松开按钮会触发mouseReleaseEvent事件,然后QPushButton会发射released()信号和clicked信号
常见的事件如点击双击鼠标移动,键盘输入事件等,事件会专门在后边进行讲解
当实例化对象上产生这些事件时,该实例对象就会发出特定的信号
信号的本质就是函数,并且是只需声明,无需实现的函数
槽?
通常就是槽函数
当点击按钮QPushButton按钮之后通常会执行对应的操作,如让QMainWindow窗口最大或者最小化,或者关闭窗口
#include <QPushButton>
#include <QDialog>
//创建QPushButton按钮
QPushButton *btn = new QPushButton("我是按钮",this);
connect(btn,SIGNAL(clicked()),this,SLOT(close()));//关闭窗口
connect(btn,SIGNAL(clicked()),this,SLOT(showMaximized()));//窗口最大化
connect(btn,SIGNAL(clicked()),this,SLOT(showMinimized()));//窗口最小化
//connect (信号的发送者 发送的具体信号 信号的接收者 信号处理 (槽))
//Lambda 表达式
connect(btn,&QPushButton::clicked,[=](){
QDialog *dlg = new QDialog(this);
dlg->resize(200,200);
dlg->show();
});
.h 头文件
private slots:
void onClicked();
.cpp文件
void MainWindow::onClicked(){
close();//关闭窗口
}
设计师界面
跨ui槽函数发送信号,传递参数
1.A窗口 .cpp 文件中
SetDialog dlg;
//时间循环会阻塞ui 所以connect在上面,打开窗口在下面
connect(&dlg,&SetDialog::sig_addOne,[=](QString value){
ui->username->setText(value);
qDebug() << ui->username->setText(value); //123
});
dlg.exec();//打开B窗口
2.在.h中添加signals传参函数
signals:
void sig_addOne(QString value); //value 传参的类型
3.在B窗口.cpp 文件中触发
Qstring value = "123";
emit sig_addOne(value);//emit触发