当前位置:网站首页>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
边栏推荐
- Selenium + webdriver + chrome realize Baidu to search for pictures
- Auto. JS custom dialog box
- Random number generation of C #
- 7-21 wrong questions involve knowledge points.
- Nat commun | current progress and open challenges of applied deep learning in Bioscience
- Linux installs MySQL in RPM (super simple)
- Docker installation MySQL
- Rust: how to implement a thread pool?
- Basic usage of crawler requests
- .104History
猜你喜欢
Resolves the interface method that allows annotation requests to be written in postman
【ACM】509. 斐波那契数(dp五部曲)
Deep learning classic network analysis and target detection (I): r-cnn
函数递归以及趣味问题的解决
Jenkspy package installation
Docker installation MySQL
Differences between SSD hard disk SATA interface and m.2 interface (detailed summary)
【ACM】70. climb stairs
Vulnérabilité d'exécution de la commande de fond du panneau de commande JD - freefuck
【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))
随机推荐
Cells in rust share variable pointers
Mysql database backup command -- mysqldump
Nat commun | current progress and open challenges of applied deep learning in Bioscience
Install the yapiupload plug-in in idea and upload the API interface to the Yapi document
Scikit learn sklearn 0.18 official document Chinese version
串口调试工具cutecom和minicom
硬核解析Promise对象(这七个必会的常用API和七个关键问题你都了解吗?)
STM32 learning record 0008 - GPIO things 1
深度学习经典网络解析目标检测篇(一):R-CNN
How to ensure the security of futures accounts online?
From introduction to mastery of MATLAB (2)
MySQL_ 01_ Simple data retrieval
JD freefuck Jingdong HaoMao control panel background Command Execution Vulnerability
MySQL auto start settings start with systemctl start mysqld
Software test summary
Installation du docker redis
Closure type of rust (difference between FN, fnmut and fnone)
Rust: how to implement a thread pool?
解决报错max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
Read excel, int digital time to time