Lua programs can emit signals using the function call syntax. Consider for example the following c++ class:

class MyQObject : public QObject {
  Q_OBJECT
...
signals:
  void mysignal(QByteArray msg, int x=0);
...
Given an instance myqobject of this class, a Lua program can emit signal mysignal as follows
  myqobject:mysignal("mymessage") -- or
  myqobject:mysignal("mymessage", 4)
Overloaded signals are resolved like method invokation. In particular, arguments with default values are handled by considering implicit overloaded functions. As for functions, it is always possible to work around these rules by selecting a particular signal using its signature.
  myqobject['mysignal(QByteArray,int)'](self,"message",3)