使用QThread在QLabel / QDebug()中显示QSlider值

时间:2013-09-10 03:09:56

标签: qt qthread qslider qdebug

我正在实现一个简单的函数,其中滑块值不断显示在标签和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);

1 个答案:

答案 0 :(得分:0)

你只是将started()信号连接到你的process()函数,所以你的线程启动并调用process,它会尽职尽责地显示你的调试输出并返回。

我怀疑你想在每次值改变时调用你的过程函数,这需要另一个信号/插槽连接(沿着这些行):

connect(ui_global.horizontalSlider_windowSize, SIGNAL(valueChanged(int)), thread, SLOT(setNum(int)));

此外,您似乎打算让HorizontalSliderThread实际在您创建的单独主题中运行,在这种情况下,您需要在那里调用QObject::moveToThread(),行:

slider->moveTothread(thread);