当前位置:网站首页>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
边栏推荐
- 多功能工具箱微信小程序源码
- Rewrite four functions such as StrCmp in C language
- Serial port debugging tools cutecom and minicom
- Vulnérabilité d'exécution de la commande de fond du panneau de commande JD - freefuck
- Multi thread safe reference arc of rust
- Hard core parsing promise object (do you know these seven common APIs and seven key questions?)
- C medium? This form of
- Closure type of rust (difference between FN, fnmut and fnone)
- String function in MySQL
- Reptile efficiency improvement method
猜你喜欢

String function in MySQL

Matlab tips (6) comparison of seven filtering methods

.105Location

How to install jsonpath package

.104History

Analysez l'objet promise avec le noyau dur (Connaissez - vous les sept API communes obligatoires et les sept questions clés?)
![解决报错max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]](/img/5f/a80951777a0473fcaa685cd6a8e5dd.png)
解决报错max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

Jenkspy package installation

C medium? This form of

Re regular expression
随机推荐
Serialization scheme of serde - trust
ArcGIS table to excel exceeds the upper limit, conversion failed
Cells in rust share variable pointers
Hard core parsing promise object (do you know these seven common APIs and seven key questions?)
Box pointer of rust
journal
Realization of consumer gray scale
Implement a simple function to calculate the sum of all integers between M ~ n (m < n)
C medium? This form of
读取excel,int 数字时间转时间
According to the result set queried by SQL statement, it is encapsulated as JSON
【ACM】376. Swing sequence
Mysql database backup command -- mysqldump
Crawler for querying nicknames and avatars based on qqwebapi
消费者灰度实现思路
Docker 安装 Redis
多功能工具箱微信小程序源码
Serial port debugging tools cutecom and minicom
Cutting permission of logrotate file
Generate verification code