- A+
所属分类:Qt经验集
Qt::AutoConnection:当信号发出方和槽函数执行方在同一个线程时,连接方式为Qt::DirectConnection;不在一个线程时,为Qt::QueuedConnection
Qt::DirectConnection:发出信号后,直接调用槽函数,等待槽函数执行结束后,再执行后续代码
Qt::QueuedConnection:发出信号后,将该信号加入事件队列,继续执行后续代码,等事件队列执行到该信号时,对应的槽函数才会响应
例子
- #include "mainwindow.h"
- #include "ui_mainwindow.h"
- MainWindow::MainWindow(QWidget *parent)
- : QMainWindow(parent)
- , ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
- init();
- }
- MainWindow::~MainWindow()
- {
- delete ui;
- }
- void MainWindow::init()
- {
- connect(this,&MainWindow::signal_ddd,this,&MainWindow::slot_ddd,Qt::QueuedConnection);
- emit signal_ddd();
- int a=1;
- a++;
- a=5;
- }
- void MainWindow::slot_ddd()
- {
- int b=1;
- b++;
- b=34;
- }
connect时选择Qt::QueuedConnection时,则emit signal_ddd() 后,会先执行int a=1;等后续代码,函数体执行结束后,再执行槽函数slot_ddd;
connect时选择Qt::DirectConnection时,则emit signal_ddd() 后,会先执行槽函数slot_ddd,再执行int a=1;等后续代码。