// main.cpp
#include <QCoreApplication>
#include <QDebug>
#include <QObject>
#include <QThread>
class Singleton : public QObject
{
Q_OBJECT
public:
static Singleton* instance();
signals:
void customSignal();
public slots:
void handleCustomSignal();
private:
explicit Singleton(QObject *parent = nullptr);
QThread *thread;
};
Singleton* Singleton::instance()
{
static Singleton instance;
return &instance;
}
Singleton::Singleton(QObject *parent) : QObject(parent)
{
// 创建新线程并将对象移动到该线程
thread = new QThread();
moveToThread(thread);
thread->start();
// 连接信号到槽函数,使用 Qt::QueuedConnection
connect(this, &Singleton::customSignal, this, &Singleton::handleCustomSignal, Qt::QueuedConnection);
// 在主线程中发射信号
qDebug() << "Emitting custom signal from main thread:" << QThread::currentThreadId();
emit customSignal();
}
void Singleton::handleCustomSignal()
{
qDebug() << "Handling custom signal in thread:" << QThread::currentThreadId();
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// 获取单例对象实例,会触发信号和槽的连接
Singleton::instance();
return a.exec();
}
#include "main.moc"