HouGISer 2019-06-20 14:02 采纳率: 0%
浏览 3619

Qt中一个类moveToThread后,线程结束后如何自动析构?

定义一个A类,集成QObject

class A : public QObject{
    Q_ObJECT
public:
    ~A(){
        qDebug()<<"~a";
    }
public slots:
    void start(){
        //耗时操作
        emit finish();
    }
signals:
    void finish();
}

在main函数中

A a = new A;
QThread t = new QThread(0);
a.moveToThread(t);
connect(t,&QThread::started,a,&A::start);
connect(a,&A::workFinished,t,&QThread::quit);
connect(t,&QThread::finished,t,&QObject::deleteLater);

这样的话,线程退出后,并没有打印出类A析构的信息。请问如何析构一个加到线程中的类?

  • 写回答

1条回答 默认 最新

  • Eyre Turing 2019-10-06 20:37
    关注
    A *a = new A;
    QThread *t = new QThread;
    a->moveToThread(t);
    connect(t, SIGNAL(started()), a, SLOT(start()));
    connect(a, SIGNAL(finish()), a, SLOT(deleteLater()));
    connect(a, SIGNAL(destroyed()), t, SLOT(quit()));
    connect(t, SIGNAL(finished()), t, SLOT(deleteLater()));
    

    a在销毁后是会发出destroyed()信号的,a完成后可以先让a销毁,然后a发出销毁的信号后t再退出,t退出完毕后销毁。这样就可以了。

    评论

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘