如果想要在QT类中自定义信号槽, 需要满足一些条件, 并且有些事项也需要注意:
1,要编写新的类并且让其继承Qt的某些标准类
2,这个新的子类必须从QObject类或者是QObject子类进行派生
3,在定义类的头文件中加入 Q_OBJECT 宏
1信号是类的成员函数 返回值必须是 void 类型
2信号的名字可以根据实际情况进行指定,参数可以随意指定, 信号也支持重载
3,信号需要使用 signals 关键字进行声明, 使用方法类似于public等关键字
信号函数只需要声明, 不需要定义(没有函数体实现),在程序中发射自定义信号: 发送信号的本质就是调用信号函数,习惯性在信号函数前加关键字: emit, 但是可以省略不写 emit只是显示的声明一下信号要被发射了, 没有特殊含义
#ifndef TEST1_H #define TEST1_H #includeclass Test1 : public QObject { Q_OBJECT public: explicit Test1(QObject *parent = nullptr); signals: public slots: void SayLove(); }; #endif // TEST1_H
#ifndef TESTSLOTS_H #define TESTSLOTS_H #includeclass TestSlots : public QObject { Q_OBJECT public: explicit TestSlots(QObject *parent = nullptr); signals: void SayHello(); public slots: // void SayToo(); }; #endif // TESTSLOTS_H
#include "test1.h" #includeTest1::Test1(QObject *parent) : QObject{parent} { } void Test1::SayLove() { qDebug()<<"I Love you"; }
#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); //start是QPushButton 用connect 连接 发送者 接受者 connect(ui->start,&QPushButton::clicked,this,&MainWindow::emitsignal); test1=new Test1(this); testslots=new TestSlots(this); connect(testslots,&TestSlots::SayHello,test1,&Test1::SayLove); } MainWindow::~MainWindow() { delete ui; } void MainWindow::emitsignal() { emit testslots->SayHello(); }
运行结果如下:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)