我正在实现一个简单的函数,其中滑块值不断显示在标签和qDebug()上。我已经使用signal / slots更新了标签,但不知何故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 移动Ui :: MainWindow * ui;从私人到公共。
mainwindow.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:添加slider-&gt; moveToThread(thread);
答案 0 :(得分:0)
你只是将started()
信号连接到你的process()
函数,所以你的线程启动并调用process,它会尽职尽责地显示你的调试输出并返回。
我怀疑你想在每次值改变时调用你的过程函数,这需要另一个信号/插槽连接(沿着这些行):
connect(ui_global.horizontalSlider_windowSize, SIGNAL(valueChanged(int)), thread, SLOT(setNum(int)));
此外,您似乎打算让HorizontalSliderThread
实际在您创建的单独主题中运行,在这种情况下,您需要在那里调用QObject::moveToThread()
,行:
slider->moveTothread(thread);