pc网站做移动端适配,邢台网站建设最新报价,广西住房和城乡建设门户网站,免费设计软件下载这里写目录标题 自定义的信号自定义的槽自定义的信号和槽的结合使用信号和槽的断开总结#xff1a; 自定义的信号 信号就是一个函数声明 前面咱们都用的qt组件自带的信号#xff0c;接下来我们自己写一个信号。 信号只需要在前面加一个signals即可 这个函数不需要实现 参数传… 这里写目录标题 自定义的信号自定义的槽自定义的信号和槽的结合使用信号和槽的断开总结 自定义的信号 信号就是一个函数声明 前面咱们都用的qt组件自带的信号接下来我们自己写一个信号。 信号只需要在前面加一个signals即可 这个函数不需要实现 参数传了一个自定义的类型 自定义的槽
当有了自定义的信号咱们再去搞一个自定义的槽。 注意在自定义的槽函数前面加了slots其实也可以不加但是不加的话槽函数将无法使用转换成字符串的方式进行关联因此建议在自定义槽函数时最好加上slots. 槽函数是必须要做实现的在mainwindow.cpp中 然后咱们用一个按钮点击信号去关联咱们自定义的槽函数 随便教一下大家如何去用代码创建主键。 首先在mainwindow.h中添加按钮的数据类型 要包含头文件QPushButton 然后在mainwindow.cpp中new一个按键并进行位置和大小的设置最后设置按钮文字 然后按钮点击信号和我们的自定义的槽进行关联 运行效果 这样就做到了自定义槽的使用
自定义的信号和槽的结合使用
上面都是用的组件已经有的信号下面咱们用自己定义的信号和槽来玩玩。 mainwindow.h中
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include QMainWindow
#include QPushButtonQT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEstruct people
{QString name;int age;
};class MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent nullptr);~MainWindow();signals:void mySignal(people p);//自定义的信号传自定义的类型public slots:void mySlot();//自定义的槽void mySlot2(people p);//自定义的槽private:Ui::MainWindow *ui;QPushButton*btn;
};
#endif // MAINWINDOW_H
mainwindow.cpp中
#include mainwindow.h
#include ui_mainwindow.h
#include QPushButton
#include QDebugMainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui-setupUi(this);btnnew QPushButton(this);btn-setGeometry(200,200,100,50);btn-setText(超级大按钮);qRegisterMetaTypepeople(people);//connect(btn,QPushButton::clicked,this,MainWindow::mySlot);connect(btn,SIGNAL(clicked()),this,SLOT(mySlot()));//必须在声明时前面加slot// connect(this,SIGNAL(mySignal(people p)),this,SLOT(mySlot2(people p)));connect(this,MainWindow::mySignal,this,MainWindow::mySlot2);}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::mySlot()
{qDebug()你点到我了endl;people p;p.name姚国林;p.age19;emit mySignal(p);//自己写的信号只能手动发送信号
}void MainWindow::mySlot2(people p)
{qDebug()p.name p.ageendl;disconnect(this,MainWindow::mySignal,this,MainWindow::mySlot2);
}运行效果 讲解 1.connect(this,MainWindow::mySignal,this,MainWindow::mySlot2);首先对自定义的信号和槽进行了关联 2.自定义的信号要进行手动发出emit mySignal§; 3.当传的产生类型是自定义的时候要在关联前加一个qRegisterMetaType(“people”); 其意在Qt中注册一个自定义数据类型people使其能够在信号和槽之间进行传递。 注意 信号的参数个数一定要大于等于槽的参数个数 槽的参数类型要与槽的参数类型相对应 信号和槽的断开 当你不想再关联了或者是防止关联多次可以使用disconnect进行断开。 当我将disconnect哪行代码进行注释时我一直点按钮就会一直输出’你点到我了’和我的信息。 当我添加上这行代码它只会第一次出现我的信息后面就关联不上了。
disconnect你要断开那个信号槽后面就输填入相关的信号槽跟connect一样。 disconnect的多种形式
总结
到这里信号槽也就讲完了。 总的来说信号和槽都是一个函数 信号是不用做实现的函数 槽是要做具体实现的函数 ui界面的组件都有自己的信号和槽信号也可以自动发出我们只需要进行关联即可手动或者自动关联 如果自定义信号和槽要注意
定义信号前要加signals定义槽函数前最好加上slots参数是自定义的类型需要加qRegisterMetaType(“class”);只能手动发出信号 emit 也是成功的将信号槽机制讲完了你一定可以愿君更上一层楼 前行的路总是孤独的也希望能跟大家成为朋友一起前进 快来互粉()V