QT学习 信号与槽

最近在学习QT信号与槽。

先看看我自己写的一个Demo.这个Demo没有窗体。

在Qt Creator中新建一个 空的QT项目

.pro文件如下:

TEMPLATE = app
 
HEADERS += \
    mysignal.h \
    myslot.h
 
SOURCES += \
    mysignal.cpp \
    myslot.cpp \
    main.cpp
 

包含三个cpp文件和2个.h文件: main.cpp  :主函数,通过调用connect,实现自定义的信号和槽的连接。

mysignal.cpp  mysignal.h :.h文件声明自定义的类,.cpp文件中实现自定义的类的函数(方法),

myslot.cpp ,myslot.h : .h文件声明自定义的类,.cpp文件中实现自定义的类的函数(方法),

main.cpp如下:

<span style="font-size:24px;">#include "mysignal.h"
#include "myslot.h"
#include <QCoreApplication>
#include <QObject>

int main(int argc, char* argv[])
{
    QCoreApplication cApp(argc, argv);
    mysignal mySig;
    myslot mySlot;

    QObject::connect(&mySig, SIGNAL(sig(QString)), &mySlot, SLOT(slot(QString)));
    emit mySig.sig("hello world");
    return cApp.exec();
}</span>

mysignal.h 


#ifndef MYSIGNAL_H

<span style="font-size:24px;">#define MYSIGNAL_H

#include <QObject>
#include <QString>

class mysignal : public QObject
{
    Q_OBJECT
public:
    explicit mysignal(QObject *parent =0);
signals:
    void sig(QString str);

//槽函数必须用slots声明 如果不声明,编译会提示找不到槽函数,我在初学的时候忘记了在槽函数前加slots
public slots:
};

#endif // MYSIGNAL_H
</span>


mysignal.cpp

#include "mysignal.h"

mysignal::mysignal(QObject* parent)
    : QObject(parent)
{
}


myslot.cpp

#include "myslot.h"

myslot::myslot(QObject *parent) :
    QObject(parent)
{
}

void myslot::slot(QString str)
{
   qDebug() << "MySlot::slot is called";
   qDebug() << str;
}

myslot.h

<span style="font-size:24px; font-family: Arial, Helvetica, sans-serif;">#ifndef MYSLOT_H</span>

#define MYSLOT_H

#include <QObject>
#include <QDebug>
#include <QString>

class myslot : public QObject
{
    Q_OBJECT
public:
    explicit myslot(QObject* parent= 0);
signals:

public slots:
    void slot(QString str);
};
#endif // MYSLOT_H


//槽函数必须用slots声明 如果不声明,编译会提示找不到槽函数.我在初学的时候忘记了在槽函数前加s//lots,然后就一直提示找不到QObject::connect: No such slot myslot::slot(QString) in ..\T09Sig//nalAndSlot\main.cpp:12


程序输出结果如下:

即信号将参数传递给槽函数了。


如果要使用Qt的信号槽机制,必须在相应的类中声明Q_OBJECT

    Q_OBJECT



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值