当前位置:网站首页>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
边栏推荐
- Stanford machine learning course summary
- Cells in rust share variable pointers
- Basic usage of crawler requests
- Excel opens large CSV format data
- Resolve the error Max virtual memory areas VM max_ map_ count [65530] is too low, increase to at least [262144]
- WIN1 remote "this may be due to credssp encryption Oracle correction" solution
- Rust: how to match a string?
- Feign requests the log to be printed uniformly
- Rust: shared variable in thread pool
- Interpretation and compilation of JVM
猜你喜欢
Map basemap Library
Scikit learn sklearn 0.18 official document Chinese version
深度学习经典网络解析目标检测篇(一):R-CNN
Docker installation MySQL
[UDS unified diagnostic service] (Supplement) v. detailed explanation of ECU bootloader development points (2)
Win1远程出现“这可能是由于credssp加密oracle修正”解决办法
【ACM】70. 爬楼梯
Spark performance optimization guide
MATLAB从入门到精通(二)
Robocode Tutorial 4 - robocode's game physics
随机推荐
Multi thread safe reference arc of rust
Quantexa CDI(场景决策智能)Syneo平台介绍
Install pyshp Library
Multifunctional toolbox wechat applet source code
C [file operation] read TXT text by line
Rust: how to match a string?
Process management command
硬核解析Promise对象(这七个必会的常用API和七个关键问题你都了解吗?)
Arcpy adds fields and loop assignments to vector data
Identification verification code
Cutting permission of logrotate file
Robocode tutorial 7 - Radar locking
Dynamically add default fusing rules to feign client based on sentinel + Nacos
Serial port debugging tools cutecom and minicom
【ACM】455. 分发饼干(1. 大饼干优先喂给大胃口;2. 遍历两个数组可以只用一个for循环(用下标索引--来遍历另一个数组))
Pyppeter crawler
Random number generation of C #
Nodejs installation
Cygwin64 right click to add menu, and open cygwin64 here
Scikit learn sklearn 0.18 official document Chinese version