在许多情况下,QObject::connect()
作为一个整体用于创建信号和插槽的连接,例如:
QLabel *label = new QLabel;
QScrollBar *scrollBar = new QScrollBar;
QObject::connect(scrollBar, SIGNAL(valueChanged(int)),
label, SLOT(setNum(int)));
但我注意到在某些情况下可以省略前缀QObject::
。例如,在创建对话框(使用QDialog
)时,可以直接使用connect()
而不使用前缀。还有其他类似的情况吗?
答案 0 :(得分:1)
背景:了解静态成员函数
首先,让我们退后一步,考虑一下C ++中的静态成员函数。例如,假设我们有一个名为MyClass
的类,其中一个静态成员函数名为myStaticFunction()
。
从MyClass
(或MyClass
的子类)的成员函数内部,有3种方法可以调用示例函数:
MyClass::myStaticFunction()
this->myStaticFunction()
myStaticFunction()
但是,从MyClass
(或MyClass
的子类)的成员函数外部,只有一种方法可以调用示例函数:
MyClass::myStaticFunction()
QObject :: connect()是一个静态成员函数
例如,在创建对话框(使用
QDialog
)时,可以直接使用connect()
而不使用前缀。
这几乎与创建对话框无关。
请记住,QObject
类有一个名为connect()
*的静态成员函数。还要记住QDialog
是QObject
的子类。
因此,从QObject
子类的成员函数内部,有3种方法可以调用connect()
:
QObject::connect(...)
this->connect(...)
connect(...)
但是,从QObject
子类的成员函数外部(例如在main()函数中),只有一种方法可以调用connect()
:
QObject::connect(...)
*确切地说,connect()
有许多重载,包括非静态版本。但是,我们只专注于静态版本。