Solved get the last QWidget actived
-
Yes, it's what I was suspecting too, but in my class, if I call qobject_cast with T = ContentPanelEditor *, who is contained in the same project and have the macro Q_OBJECT, I have the same error...
Edit:
No, I misread. ^^' after the qobject_cast on my ContentPanelEditor, I have another cast for a class in another project. So he doesn't know about this class.
This other class is contained in a dll. There is a way to apply qobject_cast on it? -
Hi,
Can you give more details about that chain of casts ?
-
Hi,
My program has two projects :
- one is a DLL.
- the other an EXE.
In my EXE, I have to apply a qobject_cast on a class who is contained in my DLL.
But if I put in this class (in the DLL) the macro Q_OBJECT, my IDE (visual studio 2017) cannot compile the project with an error of linking.
-
Is your .dll project also managed with Qt ?
-
Yes, theses projects was made with Qt
-
Then there should be no problem with
qobject_cast
. -
Yes, but I have problems, and I don't know yet how to resolve them
-
What exact problems ?
-
Hi, sorry for my late
This problem for example :
#pragma once #include <QtCore/qobject.h> class __declspec(dllexport) LayoutManager : public QObject { Q_OBJECT public: template <class T>T findParent(QObject *child) { T r = nullptr; if (!child) return nullptr; QObject *parent = child->parent(); while (parent) { r = qobject_cast<T>(parent); if (r) return r; parent = parent->parent(); } return r; } };
And I have this error message :
Error : C2338 : qobject_cast requires the type to have a Q_OBJECT macroBut the macro is here. So instead of qobject_cast, I have to use dynamic_cast
-
What type are you looking for ?
-
This is a type who doesn't exist in this project. I use this function in another project
-
And is that type a QObject based class with
Q_OBJECT
in it's declaration ?@bozo6919 said in get the last QWidget actived:
class __declspec(dllexport) LayoutManager : public QObject
On a side note, Qt provides macros to properly handle the export/import stuff. See here.