Ответ 1
Вы вызываете статическую версию в обоих вышеупомянутых случаях, подпись которой такова:
QMetaObject:: Connection QObject:: connect (const QObject * sender, const char * signal, const QObject * receiver, const char * метод, Qt:: Тип подключаемого типа = Qt:: AutoConnection) [статические]
Если вы не подключаетесь внутри подкласса QObject, вам нужно будет использовать вариант с областью, соответственно, потому что у вас не будет объекта для его вызова. Здесь вы можете увидеть код, представляющий разницу.
Не скопировано
class MyClass : public QObject
{
Q_OBJECT
public:
MyClass(QObject *parent) : QObject(parent) {
connect(this, SIGNAL(mySignal()), SLOT(mySlot()));
}
public signals:
void mySignal();
public slots:
void mySlot();
};
Scoped
int main(int argc, char **argv)
{
QCoreApplication a(argc, argv);
MyClass myObject;
QObject::connect(&myObject, SIGNAL(mySignal()), &myObject, SLOT(mySlot()));
return a.exec();
}
Обратите внимание, что если вы пытаетесь сделать это соединение в объекте получателя, вы можете даже пропустить третий аргумент для удобства (т.е. меньше ввода), потому что нестатическая версия const будет позаботиться об этом автоматически в соответствии с документацией:
Эта функция перегружает connect().
Подключает сигнал от объекта-отправителя к этому объекту.
Эквивалент соединения (отправитель, сигнал, этот, метод, тип).
Каждое соединение, которое вы делаете, излучает сигнал, поэтому дублированные соединения выдают два сигнала. Вы можете разбить соединение, используя disconnect().