Я реализую плагины низкого уровня в Qt, но наткнулся на странную ошибку компиляции.
Когда я пытаюсь использовать qobject_cast для приведения экземпляра плагина к const указателю на интерфейсговорит мне, что сам интерфейс должен наследовать QObject и использовать макрос Q_OBJECT.
Однако, когда я использую qobject_cast для приведения к неконстантному указателю на интерфейс, он компилируется просто отлично.
У меня есть интерфейс:
class PluginInterface
{
public:
PluginInterface(const QString &string);
virtual void doSomething() const = 0;
protected:
QString string;
};
Q_DECLARE_INTERFACE(PluginInterface, "PluginInterface")
И реализация:
class PLUGINSHARED_EXPORT Plugin : public QObject, public PluginInterface
{
Q_OBJECT
Q_INTERFACES(PluginInterface)
Q_PLUGIN_METADATA(IID "Plugin")
public:
Plugin();
void doSomething() const;
};
При попытке компиляции с приведением qobject_cast к константному указателю он жалуется, что PluginInterface должен наследоваться от QObject ииспользуйте макрос Q_OBJECT.
QPluginLoader loader("C:/Users/Henrique/Documents/Qt Projects/PluginTest/Plugin.dll");
const PluginInterface *interface = qobject_cast<const PluginInterface *>(loader.instance());
interface->doSomething();
Однако это компилируется просто отлично, то есть приведение к неконстантному указателю PluginInterface.
QPluginLoader loader("C:/Users/Henrique/Documents/Qt Projects/PluginTest/Plugin.dll");
const PluginInterface *interface = qobject_cast<PluginInterface *>(loader.instance());
interface->doSomething();
Почему это так?