Qt Threads Erro
-
21-12-2019 - |
Pergunta
Estou recebendo alguns erros estranhos ao edifício as seguintes linhas de Código:(Estou incluindo QVector e QThread).
NodeProcess.h :
class NodeProcess : public QThread
{ public:
NodeProcess();
unsigned int create_NewProcess(int priority);
NodeProcess operator[](int relativeID); private:
int priority;
unsigned int ID;
unsigned int threadCount;
QVector<NodeProcess> mProcess;
};
Nodeprocess.cpp :
NodeProcess::NodeProcess()
{
threadCount = 0;
}
unsigned int NodeProcess::create_NewProcess(int priority){
this->priority = priority;
threadCount++;
NodeProcess newProcess;
mProcess.append(newProcess);
return threadCount;
}
NodeProcess NodeProcess::operator[](int relativeID)
{
return mProcess[relativeID];
}
Alguém alguma idéia do que eu estou fazendo de errado ?Qualquer Dica que poderia me ajudar :).
In file included from ..\..\..\..\5.2.1\mingw48_32\include/QtCore/qalgorithms.h:45:0,
from ..\..\..\..\5.2.1\mingw48_32\include\QtCore/qvector.h:45,
from ..\..\..\..\5.2.1\mingw48_32\include\QtCore/QVector:1,
from ..\NodeProcessModelling\nodeprocess.h:4,
from ..\NodeProcessModelling\nodeprocess.cpp:1:
..\..\..\..\5.2.1\mingw48_32\include/QtCore/qobject.h: In copy constructor 'QThread::QThread(const QThread&)':
..\..\..\..\5.2.1\mingw48_32\include/QtCore/qobject.h:465:20: error: 'QObject::QObject(const QObject&)' is private
Q_DISABLE_COPY(QObject)
^
..\..\..\..\5.2.1\mingw48_32\include/QtCore/qglobal.h:978:5: note: in definition of macro 'Q_DISABLE_COPY'
Class(const Class &) Q_DECL_EQ_DELETE;\
^
In file included from ..\..\..\..\5.2.1\mingw48_32\include\QtCore/QThread:1:0,
from ..\NodeProcessModelling\nodeprocess.h:5,
from ..\NodeProcessModelling\nodeprocess.cpp:1:
..\..\..\..\5.2.1\mingw48_32\include\QtCore/qthread.h:57:21: error: within this context
class Q_CORE_EXPORT QThread : public QObject
^
In file included from ..\NodeProcessModelling\nodeprocess.cpp:1:0:
..\NodeProcessModelling\nodeprocess.h: In copy constructor 'NodeProcess::NodeProcess(const NodeProcess&)':
..\NodeProcessModelling\nodeprocess.h:7:7: note: synthesized method 'QThread::QThread(const QThread&)' first required here
class NodeProcess : public QThread
^
..\NodeProcessModelling\nodeprocess.cpp: In member function 'NodeProcess NodeProcess::operator[](int)':
..\NodeProcessModelling\nodeprocess.cpp:19:31: note: synthesized method 'NodeProcess::NodeProcess(const NodeProcess&)' first required here
return mProcess[relativeID];
^
In file included from ..\..\..\..\5.2.1\mingw48_32\include/QtCore/qalgorithms.h:45:0,
from ..\..\..\..\5.2.1\mingw48_32\include\QtCore/qvector.h:45,
from ..\..\..\..\5.2.1\mingw48_32\include\QtCore/QVector:1,
from ..\NodeProcessModelling\nodeprocess.h:4,
from ..\NodeProcessModelling\nodeprocess.cpp:1:
..\..\..\..\5.2.1\mingw48_32\include\QtCore/qthread.h: In instantiation of 'void QVector<T>::append(const T&) [with T = NodeProcess]':
..\NodeProcessModelling\nodeprocess.cpp:13:31: required from here
..\..\..\..\5.2.1\mingw48_32\include/QtCore/qglobal.h:979:12: error: 'QObject& QObject::operator=(const QObject&)' is private
Class &operator=(const Class &) Q_DECL_EQ_DELETE;
^
..\..\..\..\5.2.1\mingw48_32\include/QtCore/qobject.h:465:5: note: in expansion of macro 'Q_DISABLE_COPY'
Q_DISABLE_COPY(QObject)
^
In file included from ..\..\..\..\5.2.1\mingw48_32\include\QtCore/QThread:1:0,
from ..\NodeProcessModelling\nodeprocess.h:5,
from ..\NodeProcessModelling\nodeprocess.cpp:1:
..\..\..\..\5.2.1\mingw48_32\include\QtCore/qthread.h:57:21: error: within this context
class Q_CORE_EXPORT QThread : public QObject
^
In file included from ..\NodeProcessModelling\nodeprocess.cpp:1:0:
..\NodeProcessModelling\nodeprocess.h:7:7: note: synthesized method 'QThread& QThread::operator=(const QThread&)' first required here
class NodeProcess : public QThread
^
In file included from ..\..\..\..\5.2.1\mingw48_32\include\QtCore/QVector:1:0,
from ..\NodeProcessModelling\nodeprocess.h:4,
from ..\NodeProcessModelling\nodeprocess.cpp:1:
..\..\..\..\5.2.1\mingw48_32\include\QtCore/qvector.h:569:19: note: synthesized method 'NodeProcess& NodeProcess::operator=(const NodeProcess&)' first required here
*d->end() = copy;
^
Makefile.Debug:227: recipe for target 'debug/nodeprocess.o' failed
mingw32-make[1]: *** [debug/nodeprocess.o] Error 1
mingw32-make[1]: Leaving directory 'C:/Qt/Tools/QtCreator/bin/build-NodeProcessModelling-Desktop_Qt_5_2_1_MinGW_32bit-Debug'
makefile:34: recipe for target 'debug' failed
mingw32-make: *** [debug] Error 2
18:03:35: The process "C:\Qt\Tools\mingw48_32\bin\mingw32-make.exe" exited with code 2.
Error while building/deploying project NodeProcessModelling (kit: Desktop Qt 5.2.1 MinGW 32bit)
When executing step 'Make'
Solução
.Alguém alguma ideia do que estou fazendo errado?
Muitas coisas!
Em primeiro lugar, se você vai usar QThread, não herde dele, a menos que você esteja planejando mudar como Qthread gerencia o threading. QThread é mais um controlador de thread do que o próprio tópico.
O que você precisa fazer é criar sua classe e derivar do QObject, depois mover isso para um novo QThread. Você pode ler sobre como " Realmente use QThreads "aqui e use o código de exemplo como modelo.
Você também está criando um QVector de instâncias do NodeProcess. Isso invoca o construtor de cópia, mas o objeto é derivado do QOBJECT, cujo construtor de cópia é privado. É por isso que você recebe este erro: -
.Erro: 'qobject :: qobject (const qobject &)' é privado
Você precisa usar um QVector de ponteiros de processo de nó: QVector