Hello,Qt5(3)

信号槽是Qt中的核心机制,用于对象间的通信。connect函数用于连接信号和槽,当信号触发时,槽函数会被执行。Qt设计器支持图形化设置信号槽。自定义信号槽解决内置槽函数不足和跨线程调用问题,需添加Q_OBJECT宏并使用signals、slots关键字声明。
摘要由CSDN通过智能技术生成

信号槽

  1. connect函数用来关联信号函数槽函数

  1. 调用信号函数时会往信号队列中加入一条记录

  1. 同时信号处理线程会查询信号队列是否有值,一旦有值,就会调用信号和槽关联队列

  1. 信号和槽关联队列中存着信号和槽相对应的数据结构

  1. 信号处理线程找到信号相对应的槽函数,然后调用

Qt设计师设置信号槽

  1. 菜单栏下方的图标栏中选编辑信号/槽,双击按住发送信号的控件将红线拉到接收信号的控件,在弹出的配置连接中选择相应的信号函数和槽函数

  1. 在右下方的信号/槽编辑器(没有的话在菜单栏视图中勾选)中设置

自定义信号槽

  1. 为什么要自定义信号槽

(1)内置槽函数不能满足我们的全部需求

(2)Qt不允许其他线程调用主线程槽函数,但允许调用信号函数,因此我们需要自定义信号函数去绑定槽函数,实现间接调用槽函数

  1. 自定义信号槽

(1)添加宏Q_OBJECT,moc通过该宏判断是否生成信号槽相应cpp代码(如果在生成信息中没有moc的过程,可能是没有添加该宏或者是该宏前后存在空格)

(2)通过关键字signals、slots定义信号槽

(3)通过connect(发出对象, SIGNAL(信号函数), 接收对象, SLOT(槽函数))函数绑定(disconnect解绑)

QThread

  1. 创建线程类接口继承QThread

  1. 重载run(),处理线程函数

  1. 线程对象调用start(),启动线程函数

Example:自定义信号函数

XWidget.h

#pragma once

#include <QWidget>

class XWidget : public QWidget
{
    Q_OBJECT

public:
    XWidget();
    virtual ~XWidget();

signals:
    void Hide();
};

XWidget.cpp

#include "XWidget.h"

XWidget::XWidget()
{
    QObject::connect(this, SIGNAL(Hide()), this, SLOT(hide()));
}

XWidget::~XWidget()
{
}

main.cpp

#include "XWidget.h"
#include <QtWidgets/QApplication>
#include <QThread>

static XWidget *w = NULL;

class XThread : public QThread
{
public:
    void run()
    {
        msleep(3000);
        w->Hide();
    }
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv); 
    w = new XWidget();
    w->show();
    w->setWindowTitle("testWidget");
    XThread xt;
    xt.start();
    return a.exec();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值