《学习Qt之路2》笔记:QT自定义信号槽

注:

     只有继承了QObject类的类,才具有信号槽的能力。

     凡是QObject类,都应该在第一行代码上写Q_OBJECT,需要指出的是,不管是不是使用信号槽,都应该添加这个宏,这个宏的展开将为我们的类提供信号槽机制、国际化机制

以及Qt提供的不基于c++RTT1的反射能力。

//newspaper.h

#include <QObject>


class Newspaer : public QObject
{
	Q_OBJECT
public:
	Newspaer(const QString & name) :
		m_name(name)
	{

	}
	void send()
	{
		emit newPaper(m_name);
	}
signals:
	void newPaper(const QString & name);
private:
	QString m_name;
};

//reader.h

#include <QObject>
#include <QDebug>


class Reader : public QObject
{
	Q_OBJECT
public:
	Reader()
	{

	}
	void receiveNewspaper(const QString & name)
	{
		qDebug()<<"Recvives Nespaper: "<< name;
	}
};

//mian.cpp

#include <QtCore/QCoreApplication>
#include "newspaper.h"
#include "reader.h"

int main(int argc, char *argv[])
{
	QCoreApplication a(argc, argv);
	Newspaer newspaper("Newspaper A");

	Reader reader;

	QObject::connect(&newspaper,&Newspaer::newPaper,&reader, &Reader::receiveNewspaper);
        /*void (Newspaper:: *newPaperNameDate)(const QString &,const QDate &)=&Newspaper::newPaper;
	QObject::connect(&newspaper,newPaperNameDate,&reader,&Reader::receiveNewspaper);*/


	//QObject::connect(&newspaper,static_cast<void (Newspaper:: *)(const QString &,const QDate &)>(&Newspaper::newPaper),&reader,&Reader::receiveNewspaper);
	newspaper.send();


	return a.exec();
}


Qt  Core ,提供核心的非 GUI 功能,所有模块都需要这个模块。这个模块的类包括了动画框架、定时器、各个容器类、时间日期类、事件、IO、JSON、插件机制、智能指针、图形(矩形、路径等)、线程、XML 等。所有这些类都可以通过 <QtCore>头文件引入。


Qt Gui,提供 GUI 程序的基本功能,包括与窗口系统的集成、事件处理、OpenGL和 OpenGL ES 集成、2D 图像、字体、拖放等。这些类一般由 Qt 用户界面类内部使用,当然也可以用于访问底层的 OpenGL ES 图像 API。Qt Gui 模块提供的是所有图形用户界面程序都需要的通用功能。


Qt Multimedia,提供视频、音频、收音机以及摄像头等功能。这些类可以通过<QtMultimedia> 引入,而且需要在 pro 文件中添加 QT += multimedia。


Qt Network,提供跨平台的网络功能。这些类可以通过 <QtNetwork> 引入,而且需要在 pro 文件中添加 QT += network。


Qt Qml,提供供 QML(一种脚本语言,也提供 JavaScript 的交互机制) 使用的C++ API。这些类可以通过 <QtQml> 引入,而且需要在 pro 文件中添加 QT +=qml。


Qt Quick,允许在 Qt/C++ 程序中嵌入 Qt Quick(一种基于 Qt 的高度动画的用户界面,适合于移动平台开发)。这些类可以通<QtQuick> 引入,而且需要在 pro文件中添加 QT += quick。


Qt SQL,允许使用 SQL 访问数据库。这些类可以通过 <QtSql> 引入,而且需要在 pro 文件中添加 QT += sql。


Qt Test,提供 Qt 程序的单元测试功能。这些类可以通过 <QtTest> 引入,而且需要在 pro 文件中添加 QT += testlib。


Qt Webkit,基于 WebKit2 的实现以及一套全新的 QML API。


你可能感兴趣的:(《学习Qt之路2》笔记:QT自定义信号槽)