16,201
社区成员
发帖
与我相关
我的任务
分享
class m_work : public QObject{
Q_OBJECT
public:
m_work(QObject *parent = nullptr){
xdebug << "m_work" << QThread::currentThreadId();
}
~m_work(){
}
Q_SLOT
void m_slot(void){
xdebug << "m_slot" << QThread::currentThreadId();
QThread::msleep(5000);
xdebug << "sleep end" << QThread::currentThreadId();
}
private:
};
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_btn_close_released();
void on_btn_open_released();
signals:
void sig();
private:
Ui::MainWindow *ui;
m_work *work;
QThread *m_thread;
};
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
xdebug << "MainWindow" << QThread::currentThreadId();
work = new m_work;
m_thread = new QThread(this);
work->moveToThread(m_thread);
m_thread->start();
connect(this,&MainWindow::sig,work,&m_work::m_slot);
}
MainWindow::~MainWindow()
{
xdebug << "~MainWindow";
delete work;
delete m_thread;
delete ui;
}
void MainWindow::on_btn_close_released()
{
xdebug << "on_btn_close_released";
m_thread->quit();
if(m_thread->wait(1000) == false){
xdebug << "m_thread terminate";
m_thread->terminate();
m_thread->wait();
}
qApp->quit();
}
void MainWindow::on_btn_open_released()
{
xdebug << "on_btn_open_released";
emit sig();
}