Unable to connect signal to a function inside main()

I'll just put example here.

main.cpp:

#include <QCoreApplication>
#include <iostream>
#include <QObject>
#include "siggen.h"

void handler(int val){
  std::cout << "got signal: " << val << std::endl;
}

int main(int argc, char *argv[])
{
  SigGen siggen;
  QObject::connect(&siggen, &SigGen::sgAction, handler);
  siggen.action();

  QCoreApplication a(argc, argv);
  std::cout << "main prog start" << std::endl;

  return a.exec();
}

siggen.h:

#ifndef SIGGEN_H
#define SIGGEN_H

#include <QObject>

class SigGen : public QObject
{
  Q_OBJECT

public:
  explicit SigGen(QObject *parent = 0);
  void action(void);

signals:
  void sgAction(int value);
};

#endif // SIGGEN_H

siggen.cpp:

#include "siggen.h"

SigGen::SigGen(QObject *parent) : QObject(parent)
{}

void SigGen::action()
{
  emit sgAction(42);
}

Qt4...

All classes that inherit from QObject or one of its subclasses (e.g., QWidget) can contain signals and slots.1

So, you can not use slots where placed outside of QObject children.

You can connect signals to the slots which are in classes where derived from QObject. Put your slot in a class which is in a separated .h/.cpp file:

class MyClass : public QObject
{
   Q_OBJECT

   ...

   public slots:
     void saveText();

};

According to Qt5: New Signal Slot Syntax in Qt 5. You can connect to those type of global functions. (Thanks to @thuga's comments)