Как внутри стороннего потока (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)));
}