lesson2-信号与槽机制_PHP教程
lesson2-信号与槽机制
一、信号与槽的理解1、什么是信号和槽?
在许多GUI工具中,每一个窗口部件都有一个回调函数用于响应他们能够触发的动作,这些回调函数通常是一个指向某个函数的指针。指针是一个相对麻烦的概念,在Qt中信号与槽取代了这些凌乱的函数指针,使得程序的编写更为简单。
当一个对象发生改变的时候,信号就由这个对象发射出去,这就是这个对象要做的全部事情,它并不知道另一端是谁在接收信号,这个过程就是真正的信息封装,实现了绝对的安全。
槽用于接收信号,它们是普通的c++成员函数,它们并不知道是否有信号与自己关联,而且对象并不了解通信机制
在Qt中,当点击一个按钮的时候,这个按钮会发出一个信号,而这个信号会传递给另外一个对象,接收到信号的对象会产生相应的动作,这就是信号与槽的机制
2、信号与槽的关联
1)、信号与槽通过
QObject::connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::Connection type=Qt::AutoCompatConnection)产生关联
sender,信号的发送者
signal,待发送的信号
receiver,信号的接收者
method,槽函数
type,信号与槽的关联方式
2)、type有3种类型
Qt::DirectConnection,信号发送后立即传递给槽,只有槽函数执行完毕返回之后,发送信号"emit"之后的代码才能被执行
Qt::QueueConnection,信号发送后排队,直到事件循环有能力将它传递给槽,而不管槽函数有没有执行,发送信号"emit"之后的代码
立即被执行
Qt::AutoCompatConnection,如果信号和槽在同一个线程,等同于Qt::DirectConnection;如果信号和槽不在同一个线程,那么等同于
Qt::QueueConnection。
二、信号与槽的实例
1、信号
当对象的内部状态发生改变,信号就被发射,只有定义了一个信号的类和它的子类才能发射这个信号。例如QPushButton类中就预定义了clicked信号,当按钮被点击时,就会发射clicked信号。
在Qt中除了系统预定义的信号外,也可以自定义信号
信号的声明在头文件中,以关键字signals开头
signals:
void signals();
void signals(int x);
这里面有两个信号,最然名字一样,但是携带的参数不一样,有点类似于函数的重载。
信号类似一个普通的C++函数,但是它没有实体,只有一个空壳,而且它的返回值永远是void,不要期待从信号中返回有用的信息。信号声明好以后,有moc工具自动产生,因此不应该放在.cpp文件中。
系统预定义信号一般会自动发射,不需要我们关心,如果需要手动发射信号,可以这样写emit signals();
2、槽
槽是普通的C++成员函数,可以被正常的调用,很多信号可以与槽进行关联。既然槽是一个普通的成员函数,那么它也有权限。因此有3种类型的槽函数,public slots,private slots, protect slots
槽函数的申明也是在头文件中
private slots:
void mySlot1();
void mySlot1(int x);
在信号和槽函数的声明之前,必须加一个宏Q_OBJECT,只有这样Qt才会认识它们
3、元对象工具
moc工具会对c++文件中的类的声明进行初始化,自动产生用于初始化元对象的c++代码,元对象包含全部的信号和槽,以及指向这些名字的指
针。
moc读取c++源文件,如果发现有Q_OBJECT宏声明的类,它就会生成另外的c++源文件。moc工具不扩展#define,因此信号和槽函数中不能有宏定义
4、关联
信号与槽的关联通过函数connect
btn = new QPushButton();
lab = new QLabel();
connect(btn, SIGNAL(clicked()), lab, SLOT(clear()))
信号需要使用宏SIGNAL(),槽函数需要使用宏SLOT();
信号和槽的参数一定要一致;
当信号和槽属于同一对象时,信号的接收者可以省略
connect(btn, SIGNAL(clicked()), SLOT(showMenu()))
信号和槽应该注意的问题
1)、构造函数不能在信号和槽的区域内
2)、函数指针不能做为信号和槽的参数
3)、信号和槽不能有缺省的参数
4)、信号和槽不能带有模板类参数
5)、嵌套的类不能位于信号和槽区域,也不能有信号和槽

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Dalam beberapa hari kebelakangan ini, Ice Universe terus mendedahkan butiran mengenai Galaxy S25 Ultra, yang secara meluas dipercayai sebagai telefon pintar utama Samsung yang seterusnya. Antara lain, pembocor itu mendakwa bahawa Samsung hanya merancang untuk membawa satu peningkatan kamera

OnLeaks kini telah bekerjasama dengan Android Headlines untuk memberikan pandangan pertama pada Galaxy S25 Ultra, beberapa hari selepas percubaan gagal untuk menjana lebih daripada $4,000 daripada pengikut X (dahulunya Twitter). Untuk konteks, imej pemaparan yang dibenamkan di bawah h

Di samping mengumumkan dua telefon pintar baharu, TCL juga telah mengumumkan tablet Android baharu yang dipanggil NXTPAPER 14, dan saiz skrinnya yang besar adalah salah satu nilai jualannya. NXTPAPER 14 menampilkan versi 3.0 jenama tandatangan TCL panel LCD matte

Dalam beberapa hari kebelakangan ini, Ice Universe terus mendedahkan butiran mengenai Galaxy S25 Ultra, yang secara meluas dipercayai sebagai telefon pintar utama Samsung yang seterusnya. Antara lain, pembocor itu mendakwa bahawa Samsung hanya merancang untuk membawa satu peningkatan kamera

Vivo Y300 Pro baru sahaja didedahkan sepenuhnya, dan ia merupakan salah satu telefon Android jarak pertengahan paling tipis dengan bateri yang besar. Tepatnya, telefon pintar ini hanya tebal 7.69 mm tetapi mempunyai bateri 6,500 mAh. Ini adalah kapasiti yang sama seperti yang dilancarkan baru-baru ini

Samsung belum menawarkan sebarang petunjuk lagi tentang bila ia akan mengemas kini siri telefon pintar Edisi Peminat (FE). Seperti sedia ada, Galaxy S23 FE kekal sebagai edisi terbaharu syarikat, telah dibentangkan pada awal Oktober 2023. Walau bagaimanapun, banyak

Redmi Note 14 Pro Plus kini rasmi sebagai pengganti langsung kepada Redmi Note 13 Pro Plus tahun lepas (sekira $375 di Amazon). Seperti yang dijangkakan, Redmi Note 14 Pro Plus mengetuai siri Redmi Note 14 bersama Redmi Note 14 dan Redmi Note 14 Pro. Li

Motorola telah mengeluarkan banyak peranti tahun ini, walaupun hanya dua daripadanya boleh dilipat. Untuk konteks, sementara kebanyakan dunia telah menerima pasangan itu sebagai Razr 50 dan Razr 50 Ultra, Motorola menawarkannya di Amerika Utara sebagai Razr 2024 dan Razr 2
