Есть основной класс, в котором прописаны все элементы. В конструкторе пишу чтобы метод thread_import работал в другом потоке:
OneThing::OneThing(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::OneThing)
{
// какой-то код
qDebug() << "MAIN THREAD: " << QThread::currentThread();
QFuture<bool> future = QtConcurrent::run(this, &OneThing::thread_import);
QFutureWatcher<bool> watcher;
watcher.setFuture(future);
}
Метод thread_import выглядит следующим образом:
bool OneThing::thread_import() {
qDebug() << "IMPORT THREAD: " << QThread::currentThread();
connect(ui->button_import, &QPushButton::clicked, this, [this]() {
int count = 0;
qDebug() << "CONNECT THREAD: " << QThread::currentThread();
while (true) {
qDebug() << "THREAD: " << count;
count++;
QThread::sleep(1);
}
});
return true;
}
Вывод:
MAIN THREAD: QThread(0x1fd1f88)
IMPORT THREAD: QThread(0x41bfbe8, name = "Thread (pooled)")
CONNECT THREAD: QThread(0x1fd1f88)
То есть поток новый создается и, если поместить бесконечный цикл в метод thread_import, а не в слот функции connect, то GUI не зависнет, так как вычисления выполняются в другом потоке.
Не могу понять, как сделать, чтобы по нажатию на кнопку, слот выполнялся в новом потоке.