How to get class name
-
Hi, all
Before qt5.15.2, I always used metaobject() - > classname() to get the class name, but now there is a warning.
How can I eliminate this warning, or am I using it incorrectly?Call to virtual method 'MyClass::metaObject' during construction bypasses virtual dispatch [clang-analyzer-optin.cplusplus.VirtualCall]Best regards!
-
Hi, all
Before qt5.15.2, I always used metaobject() - > classname() to get the class name, but now there is a warning.
How can I eliminate this warning, or am I using it incorrectly?Call to virtual method 'MyClass::metaObject' during construction bypasses virtual dispatch [clang-analyzer-optin.cplusplus.VirtualCall]Best regards!
@tovax said in How to get class name:
Before qt5.15.2, I always used metaobject() - > classname() to get the class name
Why you need to do that?
BTW:
The warning is because you seem to call an overriden, virtual function inside your constructor, which shouldn't be done (ever, doesn't matter what Qt or C++ vesion). -
@tovax said in How to get class name:
Before qt5.15.2, I always used metaobject() - > classname() to get the class name
Why you need to do that?
BTW:
The warning is because you seem to call an overriden, virtual function inside your constructor, which shouldn't be done (ever, doesn't matter what Qt or C++ vesion). -
@tovax said in How to get class name:
Before qt5.15.2, I always used metaobject() - > classname() to get the class name
Why you need to do that?
BTW:
The warning is because you seem to call an overriden, virtual function inside your constructor, which shouldn't be done (ever, doesn't matter what Qt or C++ vesion). -
Where do you call these functions?
QMetaObject::classNameis ok but shouldn't be used in the constructor of anyQObjectderived class. You could try theshowEvent(only if you actually show yourMyClasswidget afterwards)This ensures that your widget was contructed completely
-
Where do you call these functions?
QMetaObject::classNameis ok but shouldn't be used in the constructor of anyQObjectderived class. You could try theshowEvent(only if you actually show yourMyClasswidget afterwards)This ensures that your widget was contructed completely
-
@Pl45m4 Hi, thank you for your answer.
I want to get the class name. In fact, these classes are independent applets. I want to use the class name to create different working directories.@tovax said in How to get class name:
I want to use the class name to create different working directories
What if the class itself provides the directory?
something likeMyClass::getWorkingDir() -
@tovax said in How to get class name:
I want to use the class name to create different working directories
What if the class itself provides the directory?
something likeMyClass::getWorkingDir()@Pablo-J-Rogina Hi, thanks!
I don't know if I understand your meaning correctly. I defined the getWorkingDir () method in the class, but I shouldn't call it in the constructor.MyClass::MyClass(QWidget *parent) : QWidget(parent) { QDir dir(getWorkingDir()); if (!dir.exists()) { dir.mkpath(getWorkingDir()); } } QString MyClass::getWorkingDir() { // Warning: Call to virtual method 'MyClass::metaObject' during construction bypasses virtual dispatch return QStringLiteral("%1/%2").arg(QApplication::applicationDirPath(), this->metaObject()->className()); }