Я новичок в qt и хочу создать поток, который отправляет целочисленный сигнал, и у меня есть главное окно, которое получает сигнал, и я уверен, что сигнал доставлен, поскольку я использовал cout, чтобы увидеть его, но когда я хочу отправить полученный номер в spinbox (или ярлык), размещенный в пользовательском интерфейсе, основной поток застрял и ничего не показывает.
вот мой класс потока:
#ifndef MYTHREAD_H
#define MYTHREAD_H
#include <QThread>
#include <QtCore>
class MyThread : public QThread
{
Q_OBJECT
public:
explicit MyThread(QObject *parent = 0);
void run();
bool Stop;
signals:
void NumberChanged(int);
public slots:
};
#endif // MYTHREAD_H
cpp файл потока:
#include "mythread.h"
#include <QtCore>
MyThread::MyThread(QObject *parent) :
QThread(parent)
{
}
void MyThread::run()
{
for(int i=0;i<2000000;i++){
QMutex m;
emit NumberChanged(i);
QThread::msleep(100);
}
}
главное окно.ч:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "mythread.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
MyThread *mthread;
private:
Ui::MainWindow *ui;
private slots:
void on_pushButton_clicked();
public slots:
void onNumberChanged(int num);
};
#endif // MAINWINDOW_H
и, наконец, mainwindow.cpp:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <iostream>
using namespace std;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
mthread = new MyThread(this);
connect(mthread,SIGNAL(NumberChanged(int)),this,SLOT(onNumberChanged(int)));
mthread->property(Q)
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::onNumberChanged(int num)
{
cout << num << endl;
ui->spinBox->setValue(num);
}
void MainWindow::on_pushButton_clicked()
{
mthread->run();
}
когда я запускаю это, cout показывает целочисленное значение, но счетчик или метка вообще не меняются, пока число не достигнет 2000000. Что не так?