Не используйте QThread::sleep()
в главном потоке, где живет цикл событий Qt, поскольку он будет блокировать сигналы, события и т. Д. Вместо этого используйте QTimer, который вызывает функцию, задачей которой является излучение сигнала.
Пример:
#include <QtCore>
class Sender: public QObject
{
Q_OBJECT
public:
using QObject::QObject;
Q_SIGNAL void mysignal(const QString & text);
void process(){
/**
* process
*/
int timeout = 1000;
// send signal after 1000 ms
QTimer::singleShot(timeout, this, &Sender::send_signal);
}
private:
// The only task of this function is to emit the signal
void send_signal(){
qDebug()<< "send signal";
Q_EMIT mysignal("Hello");
}
};
class Receiver: public QObject
{
Q_OBJECT
public:
using QObject::QObject;
Q_SLOT void myslot(const QString & text){
qDebug()<< "Received:" << text;
QCoreApplication::quit();
}
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Sender sender;
Receiver receiver;
QObject::connect(&sender, &Sender::mysignal, &receiver, &Receiver::myslot);
// call process
QTimer::singleShot(1000, &sender, &Sender::process);
return a.exec();
}
#include "main.moc"