新建按钮
QPushButton* btn=new QPushButton("close",this);
名称为close
信号和槽
connect(信号发送者(按钮),发送的信号(函数地址)(点击),信号接收者(窗口),处理的槽函数(关闭))
connect(btn,&QPushButton::clicked,this,&QWidget::close);
实现了按钮点击退出的效果
自定义
也可以自定义信号和槽
其中发送的信号只需要声明,不需要实现
class A:void signal();
class B:void slot();
在窗口头文件下创建类的对象a和b
A *a; B *b;
源文件下
this->a=new A(this);
this->b=new B(this);
connect(a,&A::signal,b,&B::slot);
此时需要一个函数触发connect信号,让A能发出signal信号
void Widget::A_emit()
{
emit a->signal();
}
在connect之后写A_emit();
即可触发
重载
对signal的重载:signal(QString behave);
对slot的重载:slot(QString behave);
在A_emit中写:emit a->signal(“move”);
重载连接用函数指针
void (A::*sn)(QString)=&A::signal;
void (B::*sl)(QString)=&B::slot;
connect(a,sn,b,sl);
A_emit();
信号连接信号
QPushButton* btn2=new QPushButton("wucan",this);
btn2->setGeometry(300,200,50,20);
void (A::*signal2)(void)=&A::signal;
void (B::*slot2)(void)=&B::slot;
connect(a,signal2,b,slot2);
connect(btn2,&QPushButton::clicked,a,signal2);
其中btn2按钮点击信号连接a的信号,而a的信号连接b的槽函数。
断开信号
disconnect(a,signal2,b,slot2);
断掉其中一个连接,信号便无法顺利发出。