【问题标题】:QObject::connect, when the prefix can be ommittedQObject::connect,当前缀可以省略
【发布时间】:2018-02-10 00:39:27
【问题描述】:

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

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

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

【问题讨论】:

标签: qt


【解决方案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() 有很多重载,包括非静态版本。但是,我们只关注静态版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-13
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    • 2015-03-13
    相关资源
    最近更新 更多