スライダーの値がラベルと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() はスライダーの値を 1 回表示し、ラベルは常に更新されます。
期待される出力: qDebug() はスライダーの値を継続的に表示し、ラベルは常に更新されます。
スライダーが移動するとラベルが更新されるため、この関数のシグナル/スロットが機能しているため、スレッドが機能しているはずです。私が間違っていることを知りません。
QThread の実装は、http://mayaposch.wordpress.com/2011/11/01/how-to-really-truly-use-qthreads-the-full-explanation/ からの参照です。
私はこれ、特に QThread にかなり慣れていないので、この機能を実装するより良い方法があれば教えてください!
どうもありがとう。
EDIT1: スライダーを追加->moveToThread(スレッド);