QObject :: connect,可以省略前缀

时间:2018-02-10 00:39:27

标签: qt

在许多情况下,QObject::connect()作为一个整体用于创建信号和插槽的连接,例如:

QLabel *label = new QLabel;
QScrollBar *scrollBar = new QScrollBar;
QObject::connect(scrollBar, SIGNAL(valueChanged(int)),
                 label,  SLOT(setNum(int)));

但我注意到在某些情况下可以省略前缀QObject::。例如,在创建对话框(使用QDialog)时,可以直接使用connect()而不使用前缀。还有其他类似的情况吗?

1 个答案:

答案 0 :(得分:1)

背景:了解静态成员函数

首先,让我们退后一步,考虑一下C ++中的静态成员函数。例如,假设我们有一个名为MyClass的类,其中一个静态成员函数名为myStaticFunction()

MyClass(或MyClass的子类)的成员函数内部,有3种方法可以调用示例函数:

  • MyClass::myStaticFunction()
  • this->myStaticFunction()
  • myStaticFunction()

但是,从MyClass(或MyClass的子类)的成员函数外部,只有一种方法可以调用示例函数:

  • MyClass::myStaticFunction()

QObject :: connect()是一个静态成员函数

  

例如,在创建对话框(使用QDialog)时,可以直接使用connect()而不使用前缀。

这几乎与创建对话框无关。

请记住,QObject类有一个名为connect() *的静态成员函数。还要记住QDialogQObject的子类。

因此,从QObject子类的成员函数内部,有3种方法可以调用connect()

  • QObject::connect(...)
  • this->connect(...)
  • connect(...)

但是,从QObject子类的成员函数外部(例如在main()函数中),只有一种方法可以调用connect()

  • QObject::connect(...)

*确切地说,connect()有许多重载,包括非静态版本。但是,我们只专注于静态版本。