当前位置:网站首页>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
边栏推荐
- Permission management with binary
- Cutting permission of logrotate file
- re正則錶達式
- .104History
- Climbing watermelon video URL
- Nanotechnology + AI enabled proteomics | Luomi life technology completed nearly ten million US dollars of financing
- journal
- Deep learning classic network analysis and target detection (I): r-cnn
- Solving the problem of displaying too many unique values in ArcGIS partition statistics failed
- proxy server
猜你喜欢

Robocode tutorial 5 - enemy class

Batch export ArcGIS attribute table

String function in MySQL

【ACM】376. 摆动序列

Cygwin64 right click to add menu, and open cygwin64 here

C medium? This form of

Re regular expression

Robocode Tutorial 4 - robocode's game physics

Solving the problem of displaying too many unique values in ArcGIS partition statistics failed

Docker 安裝 Redis
随机推荐
Nat commun | current progress and open challenges of applied deep learning in Bioscience
According to the result set queried by SQL statement, it is encapsulated as JSON
Data stream encryption and decryption of C
WIN1 remote "this may be due to credssp encryption Oracle correction" solution
Robocode tutorial 7 - Radar locking
Implement a simple function to calculate the sum of all integers between M ~ n (m < n)
ArcGIS table to excel exceeds the upper limit, conversion failed
SSD硬盘SATA接口和M.2接口区别(详细)总结
Array rotation
Docker 安装 MySQL
线上怎么确定期货账户安全的?
Crack sliding verification code
mysql自动启动设置用Systemctl start mysqld启动
String function in MySQL
Crawl the product data of Xiaomi Youpin app
Solution to Chinese garbled code after reg file is imported into the registry
journal
Spark performance optimization guide
[UDS unified diagnostic service] (Supplement) v. detailed explanation of ECU bootloader development points (1)
C medium? This form of