Код: Выделить всё
QObject::moveToThread: Cannot move objects with a parent
к этому < /p>
SDS::SDS(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::SDS)
{
[/code]
Теперь ошибка исчезла, но мой сигнал из главного окна не появляется в соответствующем потоке, хотя .isrunning () возвращает true
mainwindow.cpp
> SDS::SDS(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::SDS)
{
ui->setupUi(this);
qRegisterMetaType< Settings >();
connect(this, SIGNAL(SendTopHandles(Settings&)), &Top_Calc, SLOT(ReceiveHandles(Settings&)));
Top_Calc.moveToThread(&TopThread);
TopThread.start();
}
int SDS::on_StartScan_clicked() {
emit SendTopHandles(RunSet);
}
< /code>
mainwindow.h
class SDS : public QMainWindow
{
Q_OBJECT
public:
explicit SDS(QWidget *parent = 0);
protected:
Settings RunSet;
private:
Ui::SDS *ui;
QThread TopThread;
TopCalc Top_Calc;
signals:
void SendTopHandles(Settings& RunSet);
}
< /code>
calcthreads.h
class TopCalc : public QObject
{
Q_OBJECT
public:
explicit TopCalc(QObject *parent = 0);
protected:
Settings* RunSet;
public slots:
void ReceiveHandles(Settings& RunSet);
}
< /code>
calcthreads.cpp
TopCalc::TopCalc(QObject *parent) :
QObject(parent)
{
}
void TopCalc::ReceiveHandles(Settings& S) {
RunSet = &S;
}
< /code>
Программа никогда не попадает в функцию DeceyHandles. Это продолжается в более поздних командах. Если я удалю родителя QObject из файла конструктора и заголовка, я получаю тот же результат.
Должен ли я положить переменные потока в функцию Main () вместо конструктора пользовательского интерфейса, как показывают многие примеры?>
Подробнее здесь: https://stackoverflow.com/questions/426 ... -delivered
Мобильная версия