Qt - emit a signal from a c++ thread

后端 未结 4 693
孤独总比滥情好
孤独总比滥情好 2021-01-01 20:04

I want to emit a signal from a C++ thread (std::thread) in Qt.

How can I do it?

4条回答
  •  没有蜡笔的小新
    2021-01-01 20:50

    class MainForm : public QMainWindow
    {
        Q_OBJECT
    
    public:
        explicit MainForm(QWidget *parent = nullptr);
        virtual ~MainForm();
    
    private:
    signals:
        void signalSendButtonEnable(bool);
    
    private slots:
        void singalReceiveButtonEnable(bool);
    
    
    };
    
    
    MainForm::MainForm(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainForm), status_{false}, io_context_{}, timer_{io_context_}
    {
        ui->setupUi(this);
    
        // bind SIGNAL & SLOT
        connect(this, SIGNAL(signalSendButtonEnable(bool)), this, SLOT(singalReceiveButtonEnable(bool)));
    }
    
    MainForm::~MainForm()
    {
        delete ui;
    }
    
    void MainForm::singalReceiveButtonEnable(bool status){  //recv signal
        qDebug() << "singalReceiveButtonEnable";
        this->ui->btnConnect->setEnabled(status);
    }
    
    
    void MainForm::start(){
        std::thread t([](){
            sleep(20);
            emit signalSendButtonEnable(true);   //send signal
        });
        t.detach();
    }
    
    

提交回复
热议问题