最近在学习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>
#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
程序输出结果如下:
即信号将参数传递给槽函数了。
如果要使用Qt的信号槽机制,必须在相应的类中声明Q_OBJECT
Q_OBJECT