编写代码:QT按下按钮A打开线程执行循环命令,再按一次结束循环,结束线程
时间: 2024-03-20 16:40:21 浏览: 125
QT开线程示例
以下是一个简单的示例代码,演示如何在QT中按下按钮A来开启线程,并在再次按下按钮A时结束该线程:
```c++
#include <QThread>
#include <QPushButton>
class MyThread : public QThread
{
public:
void run() override
{
while (m_running)
{
// 执行循环命令
}
}
void stop()
{
m_running = false;
}
private:
bool m_running = true;
};
class MyWidget : public QWidget
{
public:
MyWidget(QWidget *parent = nullptr)
: QWidget(parent)
{
m_threadButton.setText("Start Thread");
connect(&m_threadButton, &QPushButton::clicked, this, &MyWidget::onThreadButtonClicked);
QHBoxLayout *layout = new QHBoxLayout(this);
layout->addWidget(&m_threadButton);
setLayout(layout);
}
private slots:
void onThreadButtonClicked()
{
if (!m_thread)
{
m_thread = new MyThread;
m_threadButton.setText("Stop Thread");
m_thread->start();
}
else
{
m_threadButton.setText("Start Thread");
m_thread->stop();
m_thread->wait();
delete m_thread;
m_thread = nullptr;
}
}
private:
QPushButton m_threadButton;
MyThread *m_thread = nullptr;
};
```
在上面的代码中,我们创建了一个名为 `MyThread` 的子类,用于执行循环命令。该类重写了 `run()` 函数,并在其中使用了一个布尔变量 `m_running` 来控制循环的执行。我们还提供了一个名为 `stop()` 的函数,用于停止线程。
我们还创建了一个名为 `MyWidget` 的窗口部件,其中包含一个名为 `m_threadButton` 的按钮。我们将该按钮的 `clicked()` 信号连接到了名为 `onThreadButtonClicked()` 的槽函数上。在该槽函数中,我们检查线程是否已经启动,如果没有,我们创建一个新的 `MyThread` 对象并启动它。如果线程已经在运行,则我们停止线程并等待它结束,最后删除线程对象。
在 `MyThread` 类的 `run()` 函数中,我们不断地循环执行某些命令,直到 `m_running` 变量被设置为 false。在 `stop()` 函数中,我们简单地将 `m_running` 变量设置为 false。
这样,当用户按下按钮时,我们将创建一个新的线程并开始循环执行某些命令。当再次按下该按钮时,我们将停止线程并等待它结束。
阅读全文