当前位置:网站首页>Connection mode of QT signal and slot connect() and the return value of emit
Connection mode of QT signal and slot connect() and the return value of emit
2022-04-23 18:15:00 【Talent、me】
emit signal() The return value of
as everyone knows ,emit It's used when sending signals , We can also use emit Return the return value after the slot function is executed .
as follows :
class testOne : public QDialog
{
Q_OBJECT
public:
explicit testOne(QWidget *parent = nullptr);
~testOne();
signals:
bool isFlag();
private:
testTwo testObject;
public slots:
};
testOne::testOne(QWidget *parent) :
QDialog(parent)
{
connect(this, SIGNAL(isFlag()), testObject, SLOT(retFlag()),Qt::BlockingQueuedConnection);
bool flag = emit isFlag();
if(flag==true){
qDebug()<<"Success!";
}else{
qDebug()<<"Fail!";
}
}
class testTwo : public QDialog
{
Q_OBJECT
public:
explicit testTwo(QWidget *parent = nullptr);
~testTwo();
private:
public slots:
bool retFlag();
};
bool testTwo::retFlag()
{
return true;
}
Of course, you can also pass values through function parameters .
The signal is connected to the slot connect() The fifth parameter of
Generally, we ignore the fifth parameter when we write the connection between the signal and the slot , Usually, the default method is to automatically connect parameters ,Qt::connectionType=Qt::AutoConnectType.
QObject::connect(sender, SIGNAL(signal()), receiver, SLOT(slot()));
const QObject *sender, // Signal sending object pointer
const char *signal, // Signal function string , Use SIGNAL()
const QObject *receiver, // Slot function object pointer
const char *member, // Slot function string , Use SLOT()
Qt::connectionType=Qt::AutoConnectType,
Qt::AutoConnection
Auto connect : Default method .
Qt::DirectConnection
Direct connection : It's equivalent to calling slot functions directly .
Qt::QueuedConnection
Queue connection : Through internal postEvent Realized . Not called in real time , Slot functions are always executed in the thread where the slot function object is located . If the signal parameter is a reference type , You will make another copy of . Thread safe .
Qt::BlockingQueuedConnection
Blocking connections : This connection mode can only be used for the thread that signals and The object of the slot function is no longer available in a thread . Through semaphores +postEvent Realized . Not called in real time , Slot functions are always executed in the thread where the slot function object is located . But after the signal , The current thread will block , Wait for the slot function to complete before continuing .
Qt::UniqueConnection
Prevent repeated connections .
Above is connect() Five connection modes , Why suddenly say these five kinds of contact information , Because I used signals and slots in a project connect(), Because the signal and slot are not in the same thread , If you use the default connection method Qt::AutoConnection Words , In different threads, the connection mode will become Qt::QueuedConnection, Will result in the use of emit signal() when , Slot functions are not called in real time , It's the end of execution emit signal(); Statement before executing the contents of the slot function . This leads to if we want to get executed emit signal() The return value of the slot function after the statement , The result is not what we want , So we need to configure the connection mode manually , If the signal and slot are in different threads , And we need to call the slot function in real time , Then you need to configure... In the fifth parameter Qt::BlockingQueuedConnection
connect(sender, SIGNAL(signal()), receiver, SLOT(slot()),Qt::BlockingQueuedConnection);
版权声明
本文为[Talent、me]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/04/202204210610471487.html
边栏推荐
- RC smart pointer in rust
- Climbing watermelon video URL
- The difference between deep copy and shallow copy
- How to restore MySQL database after win10 system is reinstalled (mysql-8.0.26-winx64. Zip)
- Linux installs MySQL in RPM (super simple)
- [UDS unified diagnostic service] (Supplement) v. detailed explanation of ECU bootloader development points (2)
- Pyppeter crawler
- Generate verification code
- MATLAB从入门到精通(二)
- ArcGIS table to excel exceeds the upper limit, conversion failed
猜你喜欢
Robocode tutorial 7 - Radar locking
【ACM】70. climb stairs
[UDS unified diagnostic service] v. diagnostic application example: Flash bootloader
Map basemap Library
【ACM】70. 爬楼梯
Nodejs installation
【ACM】376. 摆动序列
QT reading and writing XML files (including source code + comments)
【ACM】455. Distribute Biscuits (1. Give priority to big biscuits to big appetite; 2. Traverse two arrays with only one for loop (use subscript index -- to traverse another array))
解决允许在postman中写入注释请求接口方法
随机推荐
Analysez l'objet promise avec le noyau dur (Connaissez - vous les sept API communes obligatoires et les sept questions clés?)
ArcGIS license error -15 solution
Pyppeter crawler
软件测试总结
The difference between deep copy and shallow copy
7-21 wrong questions involve knowledge points.
Classes and objects
解决允许在postman中写入注释请求接口方法
How to install jsonpath package
硬核解析Promise對象(這七個必會的常用API和七個關鍵問題你都了解嗎?)
[UDS unified diagnostic service] v. diagnostic application example: Flash bootloader
Box pointer of rust
mysql自动启动设置用Systemctl start mysqld启动
Nat commun | current progress and open challenges of applied deep learning in Bioscience
Resolve the error Max virtual memory areas VM max_ map_ count [65530] is too low, increase to at least [262144]
Generate verification code
Selenium + phantom JS crack sliding verification 2
[UDS unified diagnostic service] IV. typical diagnostic service (6) - input / output control unit (0x2F)
STM32学习记录0008——GPIO那些事1
Permission management with binary