QT学习_常用类及信号和槽

Posted Leslie X徐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT学习_常用类及信号和槽相关的知识,希望对你有一定的参考价值。

Qt

Qt常用类

  1. QObject的介绍
  • QObject是所有QT对象的基类。
  • 所有继承自QObject的类产生的对象都可以使用信号和槽机制进行通讯。
  • 所有继承自QObject的类产生的对象都有QT框架提供内存管理机制支持
  1. QWidget的介绍
  • QWidget是QT中所有用户接口的基类。
  • 所谓用户接口就是与图形化界面相关的类。用户接口能接收鼠标键盘等事件。一般而言只要能在显示屏上显示的都是用户接口。
    • 例如QLabel就是一个用户接口
    • 所有的用户接口都是矩形的。其上层的用户接口会遮盖下层的用户接口。
  1. QString的介绍
  • QString用于提供Unicode编码格式的字符串。
  • Unicode和ASCII类似,但是还支持除英文字母意以外的文字比如汉字日文等。
  • 使用方式和std::string类似
  1. 以下函数都被重写,可直接使用
QDebug->cout
QString->string
Qvector->vector
QMap->map

内存管理

  1. 内存管理的概念
  • 常见内存管理机制:
    • 垃圾回收机制(Java)
    • 手动(C/C++)
    • ARC(Object-C)
    • 对象树(QT)
  1. QT对象树
  • QT提供了一种机制能自动的管理继承自QObject的对象的内存资源,即对象树
  • 当创建QT对象时可以在构造函数中指定父对象,若不指定则父对象为空。
  • 指定了父对象的QT对象会在父对象的内存回收时自动被回收。

信号和槽

  1. 信号的概念
  • 在继承自QObject的类中,还有信号成员。
  • 信号成员会在满足一定条件时某个对象自动触发该对象的信号(触发条件可以通过QT帮助文档进行查看每个类中标示了signals的栏位),触发后程序会调用与信号相连接的槽函数。
  1. 槽函数的概念
  • 在继承自QObject的类中,还有槽函数(可以通过QT帮助文档查看每个类中标示了slots栏位)。
  • 槽函数使用时和类的成员函数没有区别。
  • 槽函数除了能通过代码手动调用外,还可以通过与信号连接来通过信号调用。
  1. 信号与槽连接
  • 可以使用QObject的静态成员函数connect来对信号和槽进行连接。
  • 当sender对象的signal信号触发时,receiver对象的method函数会自动调用
  1. 自定义信号
  • 定义:
class类名:public QObject{
	Q_OBJECT
	//其他成员
	signals:
		void 信号名(参数列表);
};
  • 当需要信号条件满足时,可以使用如下方法发出信号
emit 信号名(参数值);

信号参数列表里的值会拷贝到所连接的槽函数的参数列表中。

  1. 自定义槽函数
  • 定义:
class类名:public QObject{
	Q_OBJECT
	//其他成员
	public slots:
		void 槽名(参数列表);
};

示例:

#include <QObject>
#include <QDebug>
class SigObject: public QObject
{
	Q_OBJECT
	
	public:
		SigObject(QObject* parent = 0);
		void sendVoid();
		void sendInt(int value);
	signals:
		void sigVoid();
		void sigInt(int i);
};

class SlotObject: public QObject
{
	Q_OBJECT
	
	public:
		SlotObject(QObject* parent = 0);
	public slots:
		void onSigVoid();
		void onSigInt(int value);
}



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

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


void SlotObject::onSigVoid()
{
	qDebug()<<"slotVoid()";
}

void SlotObject::onSigInt(int value)
{
	qDebug()<<"slotInt:"<<value;
}


void SigObject::sendVoid()
{
	emit sigVoid();
}

void SigObject::sendInt(int value)
{
	emit sigInt(value);
}



int main(int argc, char** argv)
{
	QApplication app(argc,argv);
	
	SigObject sigObj;
	SlotObject slotObj;
	
	//信号和槽的连接
	QObject::connect(&sigObj,SIGNAL(sigVoid()),
						&slotObj, SLOT(onSigVoid()));
	
	QObject::connect(&sigObj,SIGNAL(sigInt(int)),
						&slotObj, SLOT(onSigInt(int)));
						
	//发送信号
	sigObj.sendVoid();
	for(int i=0;i<5;i++)
	{
		sigObj.sendInt(i);
	}
	
	return app.exec();

}


以上是关于QT学习_常用类及信号和槽的主要内容,如果未能解决你的问题,请参考以下文章

QT学习-标准信号窗口和槽

Qt信号和槽的问题

QT的信号和槽

C++框架_之Qt的信号和槽的详解

QT:信号和槽学习笔记

初见QT---信号和槽