Как внутри стороннего потока (qthread) получить значение из ui? Qt Creator

У меня есть поток ClickerThread, как в переменную внутри него (переменной value) передать значение из "ui->lbutton_wait_slider"? lbutton_wait_slider внутри qt designer является QScrollBar'ом, и мне нужно получать из него значения, но у меня не получается, как это сделать? Пожалуйста, покажите прям кодом

код window.h

#ifndef WINDOW_H
#define WINDOW_H

#include <QMainWindow>
#include <QThread>
#include <Windows.h>
#include <QScrollBar>

QT_BEGIN_NAMESPACE
namespace Ui { class window; }
QT_END_NAMESPACE

class ClickerThread : public QThread
{
    Q_OBJECT

protected:
    void run() override
    {
        while (true) {
            int value = 0;


            if (GetKeyState(VK_XBUTTON2) & 0x8000) {
                mouse_event(MOUSEEVENTF_LEFTDOWN, NULL, NULL, 0, 0);
                mouse_event(MOUSEEVENTF_LEFTUP, NULL, NULL, 0, 0);
                QThread::msleep(5);
            }

            QThread::msleep(1);
        }
    }
};

class window : public QMainWindow
{
    Q_OBJECT

public:

    window(QWidget *parent = nullptr);
    ~window();

private slots:
    void on_lbutton_wait_slider_valueChanged(int value);

    void on_rbutton_wait_slider_valueChanged(int value);

private:
    Ui::window *ui;
    ClickerThread *clickerThread;
};
#endif // WINDOW_H

Код window.cpp

#include "window.h"
#include "ui_window.h"

window::window(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::window)
{
    ui->setupUi(this);

    int current_lbutton_wait = ui->lbutton_wait_slider->value();
    ui->lbutton_wait_label->setText(QString::number(current_lbutton_wait) + " мс");

    int current_rbutton_wait = ui->rbutton_wait_slider->value();
    ui->rbutton_wait_label->setText(QString::number(current_rbutton_wait) + " мс");

    clickerThread = new ClickerThread;
    clickerThread->start();


}

window::~window()
{
    if (clickerThread)
    {
        clickerThread->quit();
        clickerThread->wait();
    }
    delete ui;
}

void window::on_lbutton_wait_slider_valueChanged(int value)
{
    ui->lbutton_wait_label->setText(QString::number(value) + " мс");
}


void window::on_rbutton_wait_slider_valueChanged(int value)
{
    ui->rbutton_wait_label->setText(QString::number(value) + " мс");
}



Ответы (1 шт):

Автор решения: Sergey Tatarintsev

Да собственно как обычно - прокинуть сигнал в слот потока:

window.h

class ClickerThread : public QThread
    //...
public slots:
    void lbutton_changed_slot(int value){ qDebug()<< "received value="<<value; };

window.cpp

window::window(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::window)
{
    //...
    connect(ui->lbutton_wait_slider, SIGNAL(valueChanged(int)),clickerThread, SLOT(lbutton_changed_slot(int)));
}
→ Ссылка