一.直接UI方式
1.点击NO.1 UI pushbutton按键

2.右键展开选择转到槽

3.选择clicked()

4.会直接跳转到widget.cpp 生成红色框函数体
函数内容是蓝色我自己添加部分

二. QObject::connect方式
QObject::connect(sender,SIGNAL(signal),receiver,SLOT(slot())
eg:
QObject::connect(ui->btnCon,SIGNAL(clicked()),this,SLOT(on_btnCon_clickedMyself()));
三.Lamda表达式方式(用的较少)
QObject::connect(sender,&Sender::signal,[=](){})
eg:
QObject::connect(ui->btnLamda,&QPushButton::clicked,[=](){
std::cout<<"btnLamdaClick"<<std::endl;
});
四.函数指针方式
QObject::connect(sender,&Sender:signal,receiver,&Receiver::slot)
eg:
QObject::connect(ui->btnFortch,&QPushButton::clicked,this,&Widget::on_fortch_clicked);


文件夹中收首先含有这几个文件,UI界面如上(数字依次代表方式)
代码合集详解使用方式
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <iostream>
QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private slots:
void on_btnCon_clickedMyself();
void on_btnui_clicked();
void on_fortch_clicked();
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
widget头文件添加了3个槽函数的声明(可以理解为最终实现的动作)
private slots:
void on_btnCon_clickedMyself();
void on_btnui_clicked();
void on_fortch_clicked();
widget.cpp
1.在构造函数中进行信号与槽的绑定
第2种方式:QObject::connect(sender,SIGNAL(signal),receiver,SLOT(slot())
QObject::connect(ui->btnCon,SIGNAL(clicked()),this,SLOT(on_btnCon_clickedMyself()));
第3种方式: QObject::connect(sender,&Sender::signal,[=](){})
QObject::connect(ui->btnLamda,&QPushButton::clicked,[=](){
std::cout<<"btnLamdaClick"<<std::endl;
});
第4种方式: QObject::connect(sender,&Sender:signal,receiver,&Receiver::slot);
QObject::connect(ui->btnFortch,&QPushButton::clicked,this,&Widget::on_fortch_clicked);
&Sender是&QPushButton::clicked
&Receiver是&Widget::on_fortch_clicked 没有括号哈
2.注意是Sender还是Receiver,&一般是引用类名
3.绑定完成后再去widget.h添加.cpp定义去写这几个slot
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{
ui->setupUi(this);
//1.在构造函数中进行信号与槽的绑定
//2.第1种方式:QObject::connect(sender,SIGNAL(signal),receiver,SLOT(slot())
QObject::connect(ui->btnCon,SIGNAL(clicked()),this,SLOT(on_btnCon_clickedMyself()));
//3.第2种方式: QObject::connect(sender,&Sender::signal,[=](){})
QObject::connect(ui->btnLamda,&QPushButton::clicked,[=](){
std::cout<<"btnLamdaClick"<<std::endl;
});
//4.第3种方式: QObject::connect(sender,&Sender:signal,receiver,&Receiver::slot);
QObject::connect(ui->btnFortch,&QPushButton::clicked,this,&Widget::on_fortch_clicked);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_btnCon_clickedMyself()
{
std::cout<<"btnClicked"<<std::endl;
}
void Widget::on_btnui_clicked()
{
std::cout<<"UIBtnClicked"<<std::endl;
}
void Widget::on_fortch_clicked()
{
std::cout<<"btnFortch clicked"<<std::endl;
}
main.cpp(几乎没动,自己生成的)
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
如内容对你有帮助,可点赞支持博主继续创作哦^O^
(博主最近累bia了,有点子码不动了,鸡血支持)

805

被折叠的 条评论
为什么被折叠?



