当前位置: 首页 > wzjs >正文

用手机制作网站做网站专业术语

用手机制作网站,做网站专业术语,网站推广营销服务,推广网上国网在Qt中,信号槽机制是一个非常强大的特性,它用于实现对象之间的通信。除了默认的直接触发方式之外,Qt还提供了队列触发等不同的触发方式。 1. 直接触发(Direct Connection) 直接触发是最常见的连接方式,信…

在Qt中,信号槽机制是一个非常强大的特性,它用于实现对象之间的通信。除了默认的直接触发方式之外,Qt还提供了队列触发等不同的触发方式。

1. 直接触发(Direct Connection)

直接触发是最常见的连接方式,信号发射后,槽函数会立即执行。它通常用于发信号和接收槽都在同一个线程时。

#include <QObject>
#include <QDebug>

class Sender : public QObject {
    Q_OBJECT
public:
    void sendSignal() {
        emit signal1();
    }
signals:
    void signal1();
};

class Receiver : public QObject {
    Q_OBJECT
public slots:
    void slot1() {
        qDebug() << "Signal received directly, Slot executed!";
    }
};

int main() {
    Sender sender;
    Receiver receiver;

    QObject::connect(&sender, &Sender::signal1, &receiver, &Receiver::slot1, Qt::DirectConnection);
    
    sender.sendSignal();  // Will directly call slot1
}
在这个例子中,signal1 信号触发时,槽函数 slot1 会立即执行,属于直接连接。

2. 队列触发(Queued Connection)

队列触发适用于发信号和接收槽在不同线程时。此时,信号会被放入接收线程的事件队列中,槽函数会在接收线程的事件循环中执行。这样能避免直接跨线程调用导致的问题。

#include <QObject>
#include <QDebug>
#include <QThread>

class Sender : public QObject {
    Q_OBJECT
public:
    void sendSignal() {
        emit signal1();
    }
signals:
    void signal1();
};

class Receiver : public QObject {
    Q_OBJECT
public slots:
    void slot1() {
        qDebug() << "Signal received via queue, Slot executed!";
    }
};

int main() {
    QThread thread;
    Sender sender;
    Receiver receiver;

    receiver.moveToThread(&thread);  // Move receiver to another thread
    thread.start();

    QObject::connect(&sender, &Sender::signal1, &receiver, &Receiver::slot1, Qt::QueuedConnection);

    sender.sendSignal();  // Slot will be executed in receiver's thread

    thread.quit();
    thread.wait();
}
在这个例子中,由于 SenderReceiver 在不同的线程中,信号 signal1 会被放入接收线程的事件队列中,等到事件循环执行时,槽函数 slot1 才会被调用。

3. 自动触发(Auto Connection)

这是 Qt 的默认行为,Qt 会自动选择直接触发或队列触发的方式,取决于信号和槽是否在同一个线程中。如果在同一个线程,直接触发;如果在不同的线程,则使用队列触发。

#include <QObject>
#include <QDebug>
#include <QThread>

class Sender : public QObject {
    Q_OBJECT
public:
    void sendSignal() {
        emit signal1();
    }
signals:
    void signal1();
};

class Receiver : public QObject {
    Q_OBJECT
public slots:
    void slot1() {
        qDebug() << "Signal received (auto connection), Slot executed!";
    }
};

int main() {
    QThread thread;
    Sender sender;
    Receiver receiver;

    receiver.moveToThread(&thread);  // Move receiver to another thread
    thread.start();

    QObject::connect(&sender, &Sender::signal1, &receiver, &Receiver::slot1);  // Default auto connection

    sender.sendSignal();  // Will use Qt's auto connection (queued because they are in different threads)

    thread.quit();
    thread.wait();
}

在这个例子中,QObject::connect 没有明确指定连接类型,Qt 会自动选择适当的连接方式(在不同线程时,默认会使用队列触发)。

总结

  • 直接触发:信号发射后,槽函数立即执行(通常用于同一线程)。

  • 队列触发:信号被放入接收线程的事件队列,槽函数在事件循环中执行(通常用于跨线程)。

  • 自动触发:Qt会根据线程关系自动选择触发方式。


文章转载自:

http://Mlskv0zg.mjynx.cn
http://PXN55k3c.mjynx.cn
http://EHQGOXrF.mjynx.cn
http://ryXuP3Wl.mjynx.cn
http://v0ipGL21.mjynx.cn
http://PxLfSsYL.mjynx.cn
http://innHD89g.mjynx.cn
http://vrlKvq5D.mjynx.cn
http://9alE1WjQ.mjynx.cn
http://vMMVP8f1.mjynx.cn
http://sOIujyUZ.mjynx.cn
http://WUqjqckA.mjynx.cn
http://4fEYIPA6.mjynx.cn
http://JdUu1KWP.mjynx.cn
http://IHMnEBDG.mjynx.cn
http://AyINibXt.mjynx.cn
http://G9weNGdI.mjynx.cn
http://tUyn4dpr.mjynx.cn
http://P2xP34S4.mjynx.cn
http://xvREW04m.mjynx.cn
http://fS1kqvFz.mjynx.cn
http://LycfvmvZ.mjynx.cn
http://IZ0sYq9B.mjynx.cn
http://YRixwWm2.mjynx.cn
http://lNwRd8Ef.mjynx.cn
http://N5Z19eTv.mjynx.cn
http://vi2TOpfa.mjynx.cn
http://jpR42zfG.mjynx.cn
http://OZiBajsi.mjynx.cn
http://o6XYMRh6.mjynx.cn
http://www.dtcms.com/wzjs/758563.html

相关文章:

  • 网站开发实用技术2.8.5西安商城网站开发
  • 广西金水建设开发有限公司网站wordpress主题jquery
  • 怎么制作公众号封面图滨州seo排名
  • 佛山电商网站建设wordpress远程保存图片
  • 个人网站建设详细教程网站建设主要包括什么
  • 烟台环保网站建设内蒙古网站建设费用
  • 网站开发php有哪些目前做响应式网站最好的cms
  • 博罗网站定制怎么查公司网站有没有中文域名
  • 德阳网站seo有没有类似一起做网店的网站
  • 金坛市政建设有限公司网站网站页面禁止访问
  • 政务咨询投诉举报网站建设平面设计网上接单
  • wordpress 无法注册湖南企业竞价优化公司
  • 厦门 外贸网站定制型网站制作
  • 网站维护与排名网站运营需要学什么
  • 电影网站这么做关键词先进的网站建设
  • 哪个网站可以做视频播放器从事网站开发需要什么
  • 建设常规的网站报价是多少网站描述怎么写比较好
  • 解释网站为什么这样做wordpress登陆页面模板
  • 微网站 html盘多多搜索引擎入口
  • 陕西建设厅执业注册中心网站做网站的属于什么专业
  • 哪里有给网站做什么公司适合做seo优化
  • 如何做网站描述wordpress 主题下载
  • 12306网站为什么做那么差asp.net做网站教程
  • 城乡建设主管部门官方网站wordpress cu主题
  • 德阳网站建设怎么做查询数据输入的网站
  • 游戏建模培训手机优化不足80怎么办
  • 美食网站首页设计为什么外包会是简历污点
  • 网站做全景图预览wordpress 插件 论坛
  • 网站建设过程中的通用原则2345浏览器网址
  • 西安做网站需要多少钱87网站一起做