我正在实现一个简单的函数,其中滑块值不断显示在标签和 qDebug() 上。我已经使用信号/插槽更新了标签,但不知何故 qDebug() 线程无法正常工作。我希望看到控制台充满了滑块的值。下面是我的代码: SliderThread.h:
class HorizontalSliderThread : public QThread {
Q_OBJECT
public:
HorizontalSliderThread(Ui::MainWindow *ui);//in order to call slider value in HorizontalSliderThread class
~HorizontalSliderThread();
public slots:
void process();
private:
};
SliderThread.cpp
HorizontalSliderThread::HorizontalSliderThread(Ui::MainWindow *ui){
ui_global = *ui;
}
void HorizontalSliderThread::process(){
qDebug("Test Thread");
int value = ui_global.horizontalSlider_windowSize->value();
QObject::connect(ui_global.horizontalSlider_windowSize,SIGNAL(valueChanged(int)),ui_global.label_SliderWindowSize,SLOT(setNum(int)));//update value to label
qDebug()<<value; //update value in console
}
mainwindow.h move Ui::MainWindow *ui; 从私人到公共。
主窗口.cpp
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QThread* thread = new QThread;
HorizontalSliderThread* slider = new HorizontalSliderThread(ui);
slider->moveToThread(thread);
connect(thread, SIGNAL(started()), slider, SLOT(process()));
thread->start();
}
当前输出: qDebug() 显示一次滑块的值,标签不断更新。
预期输出: qDebug() 连续显示滑块的值,标签不断更新。
由于在移动滑块时会更新标签,因此此功能的信号/插槽正在工作,这意味着我的线程应该正在工作。不知道我做错了什么。
QThread 实现参考来自: http: //mayaposch.wordpress.com/2011/11/01/how-to-really-truly-use-qthreads-the-full-explanation/
我对此很陌生,尤其是 QThread,所以如果有更好的方法来实现这个功能,请告诉我!
非常感谢。
EDIT1:添加滑块->moveToThread(thread);