一、元对象系统的组成

什么是Qt元对象系统

Qt:06---元对象系统(QObject、Q_OBJECT、MOC)、sender()函数_信号与槽

元对象由以下3个基础组成:

  • QObject基类:任何需要使用元对象系统功能的类必须继承自QObject
  • Q_OBJECT宏:此宏必须出现在类的私有声明区,用于启动元对象的特性(如动态属性、信号与槽等)
  • MOC(元对象编辑器):为QObject子类实现元对象特性提供必要的代码实现

Qt:06---元对象系统(QObject、Q_OBJECT、MOC)、sender()函数_sender函数_02

二、QObject的其他功能

Qt:06---元对象系统(QObject、Q_OBJECT、MOC)、sender()函数_QObject_03

QObject *obj=new QPushButton;
QString str=obj->metaObject()->className();
//str等于QPushButton

Qt:06---元对象系统(QObject、Q_OBJECT、MOC)、sender()函数_信号与槽_04

QTimer* ti=new QTimer;
bool val1=ti->inherits("QTimer");   //true
bool val2=ti->inherits("QObject");  //true
bool val3=ti->inherits("QAbstractButton");//false

Qt:06---元对象系统(QObject、Q_OBJECT、MOC)、sender()函数_系统功能_05

Qt:06---元对象系统(QObject、Q_OBJECT、MOC)、sender()函数_QObject_06

Qt:06---元对象系统(QObject、Q_OBJECT、MOC)、sender()函数_sender函数_07

Qt:06---元对象系统(QObject、Q_OBJECT、MOC)、sender()函数_元对象_08

三、sender()函数
  •  QObject的sender()函数可以在槽函数中用来获取发射信号的对象,但是需要强制类型转换

演示案例:

  • 设置一个“选择文件”按钮的toolTip

Qt:06---元对象系统(QObject、Q_OBJECT、MOC)、sender()函数_sender函数_09

  • 定义按钮的clicked槽函数,在槽函数内得到发射此信号的对象,并且打印该对象的toolTip
void Widget::on_btn_selectFile_clicked()
{
    QPushButton *btn=static_cast<QPushButton*>(sender());

    ui->plainTextEdit->appendPlainText(btn->toolTip());
}

Qt:06---元对象系统(QObject、Q_OBJECT、MOC)、sender()函数_sender函数_10