Проблема с преобразованием обычного указателя (на QThread) в QPointer и обратно.C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Проблема с преобразованием обычного указателя (на QThread) в QPointer и обратно.

Сообщение Anonymous »

Я новичок в QPointers и модифицирую старый код, который работал с обычными указателями. В моем заголовочном файле я определяю QPointer следующим образом:

Код: Выделить всё

QPointer m_qthreadclass;
и я определяю методы получения и установки следующим образом:

Код: Выделить всё

void SomeClass::mythread(QThread *tc) {
m_qthreadclass = tc;  // Error 1
}

QThread *SomeClass::mythread() {
QThread * tc = m_qthreadclass;  // Error 2
return tc;
}
Ошибка 1:

Код: Выделить всё

error: invalid ‘static_cast’ from type ‘QThread*’ to type ‘QPointer::QObjectType*’ {aka ‘QObject*’}
/opt/Qt/5.15.2/gcc_64/include/QtCore/qpointer.h: In instantiation of ‘QPointer& QPointer::operator=(T*) [with T = QThread]’:
../globals.cpp:128:26:   required from here
/opt/Qt/5.15.2/gcc_64/include/QtCore/qpointer.h:74:17: error: invalid ‘static_cast’ from type ‘QThread*’ to type ‘QPointer::QObjectType*’ {aka ‘QObject*’}
74 |     { wp.assign(static_cast(p)); return *this; }
|                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
Ошибка 2:

Код: Выделить всё

error: invalid ‘static_cast’ from type ‘QObject*’ to type ‘QThread*’
In file included from /opt/Qt/5.15.2/gcc_64/include/QtCore/QPointer:1,
from ../../haast-call-recovery-control/src/cpp/globals.h:18,
from ../../haast-call-recovery-control/src/cpp/globals.cpp:4:
/opt/Qt/5.15.2/gcc_64/include/QtCore/qpointer.h: In instantiation of ‘T* QPointer::data() const [with T = QThread]’:
/opt/Qt/5.15.2/gcc_64/include/QtCore/qpointer.h:83:14:   required from ‘QPointer::operator T*() const [with T = QThread]’
../globals.cpp:135:20:   required from here
/opt/Qt/5.15.2/gcc_64/include/QtCore/qpointer.h:77:14: error: invalid ‘static_cast’ from type ‘QObject*’ to type ‘QThread*’
77 |     { return static_cast(wp.internalData()); }
|              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Я подтвердил, что QThread происходит от QObject. Что не так с этим типом заданий?

Подробнее здесь: https://stackoverflow.com/questions/793 ... r-and-back
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»