Qt::AutoConnection、Qt::DirectConnection、Qt::QueuedConnection区别 比较 Qt经验集 Qt问题 同步 异步 信号槽

  • A+
所属分类:Qt经验集

Qt::AutoConnection:当信号发出方和槽函数执行方在同一个线程时,连接方式为Qt::DirectConnection;不在一个线程时,为Qt::QueuedConnection

Qt::DirectConnection:发出信号后,直接调用槽函数,等待槽函数执行结束后,再执行后续代码

Qt::QueuedConnection:发出信号后,将该信号加入事件队列,继续执行后续代码,等事件队列执行到该信号时,对应的槽函数才会响应

例子

  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. MainWindow::MainWindow(QWidget *parent)
  4.     : QMainWindow(parent)
  5.     , ui(new Ui::MainWindow)
  6. {
  7.     ui->setupUi(this);
  8.     init();
  9. }
  10. MainWindow::~MainWindow()
  11. {
  12.     delete ui;
  13. }
  14. void MainWindow::init()
  15. {
  16.     connect(this,&MainWindow::signal_ddd,this,&MainWindow::slot_ddd,Qt::QueuedConnection);
  17.     emit signal_ddd();
  18.     int a=1;
  19.     a++;
  20.     a=5;
  21. }
  22. void MainWindow::slot_ddd()
  23. {
  24.     int b=1;
  25.     b++;
  26.     b=34;
  27. }

connect时选择Qt::QueuedConnection时,则emit signal_ddd() 后,会先执行int a=1;等后续代码,函数体执行结束后,再执行槽函数slot_ddd;

connect时选择Qt::DirectConnection时,则emit signal_ddd() 后,会先执行槽函数slot_ddd,再执行int a=1;等后续代码。

Qt大课堂-QtShare

发表评论

您必须登录才能发表评论!