Unsolved QTplugin for beginner
-
@SGaist thank you
So it mean if I have an application, lets say app-1 and I want to use app-2 in app-1 , so I need to create plugin of app-2 and add it to app-1? -
@JadeN001 said in QTplugin for beginner:
@SGaist thank you
So it mean if I have an application, lets say app-1 and I want to use app-2 in app-1 , so I need to create plugin of app-2 and add it to app-1?Yes, that should work.
-
@JadeN001
Normally the story would be more like
App 1 has some features that App 2 could also use.
Then you take the features and put in plugin.
Now both apps can use the same code via the plugin.Other use cases is that some features are not used all the time. So
putting them in a plugin, allows the app to start faster and first load the extra features when needed.Other use case is some sort of base App. user can then get extra features via plugins.
Often the plugins could be made by other people than the programmer of the main app.So its both a system for dividing the code to smaller blocks as not to have one BIG fat App.
Its also a way to allow external people to add features to your app , or allow you to have a base app and more features can be had via plugins. ( to make app extensible without having the source code )
-
I am trying to create a plugin of widget.
for that i have created 2 sub-projects. one is of widgets and second is of plugin. but i am not able to include header file of widget in to plugin.
so,how to include files into another project.main project pro:
TEMPLATE = subdirsSUBDIRS +=
pluginwidgets
pluginI
-
Here another issue i'm facing ,I don't know exact reason behind it .
Getting error of :```'server_task' does not name a type server_task* m_server; ^ mainwindow.h file : #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include<QWidget> #include"server_task.h" #include"broadcastmsg.h" namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); void addmessage(QString msg); private slots: void on_pushButton_Start_clicked(); void on_actionSendToAll_triggered(); private: Ui::MainWindow *ui; BroadCastmsg *b; server_task* m_server; }; #endif // MAINWINDOW_H
-
okay,my problem is solved.i have to just declare class name
class server_task before
class maiwindow
{
}class server_task; // <------here class MainWindow : public QMainWindow {.... ..... }
But i don't know why it is required because i have already include header file of it.
-
Hi
To declare
server_task* m_server;it needs to have seen type/class server_task
either via
class server_task; // forwarding
or
#include "server_task.h" -
@mrjj It means that only including header file "server_task.h" it should work.if so,it does not work in my case.I have to add :
class server_task;
-
Error: Plugin Metadata file "broadcastplugin.json" does not exist. Declaration will be ignored
plugin.h #ifndef BROADCAST_PLUGIN_H #define BROADCAST_PLUGIN_H #include<QObject> #include<QString> #include"C:\Users\Kits\Documents\ServerWithPlugin\Server/interface_broadcast.h" class broadcast_Plugin:public QObject,interface_broadcast { Q_OBJECT Q_PLUGIN_METADATA(IID "org.qt-project.Qt.BroadcastInterface" FILE "broadcastplugin.json") Q_INTERFACES(interface_broadcast) public: broadcast_Plugin(); void sendmsg(QString msg) override; signals: void sendToALL(QString m); }; #endif // BROADCAST_PLUGIN plugin.pro file: #! [0] TEMPLATE = lib CONFIG += plugin QT += widgets INCLUDEPATH += ../echowindow HEADERS = echoplugin.h SOURCES = echoplugin.cpp TARGET = $$qtLibraryTarget(echoplugin) DESTDIR = ../plugins #! [0] EXAMPLE_FILES = broadcastplugin.json # install target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/echoplugin/plugins INSTALLS += target CONFIG += install_ok # Do not cargo-cult this!
-
well its never needed with both. ever :)
so something else.regarding:
broadcastplugin.json
you have to make it yourself. -
@mrjj I am new in this area,so can u guide me how to create a .json file!
-
I am really stuck in plugin.Can anyone suggest me the basic video/guideline of how to start with plugin for application. As based on qt documentation "echo-plugin" example
http://doc.qt.io/qt-5/qtwidgets-tools-echoplugin-example.html.
As a main project, which type of project should be chosen.how to create .json file for echo plugin(from QT Examples) which type of project I should choose. I am not getting clear idea from qt documentation.
Currently I am using "empty Qmake project " for echoplugin . -
@JadeN001
Just create the .json file
echoplugin.json
only contains {} ( empty json object ) and
that prevents the warning.You can use any template for plugin but "empty Qmake project " should be fine, but make sure you
add the needed stuff in .pro
most critical being
TEMPLATE = lib
CONFIG += pluginThere is also the old sample
https://doc.qt.io/archives/qt-5.10/qtwidgets-tools-plugandpaint-plugins-basictools-example.html
That shows a paint program that uses plugins to add brushes and pens. Not sure why its retired.why not copy echo sample and just change names ?
Most plugin code is the same for all plugins.
The only part that differ is names and and the actual feature code of the plugin. (what it does) -
@mrjj yeah,thank you very much...I will go through as u have guided.
-
plugin.pro: TEMPLATE = lib CONFIG += plugin release QT += widgets INCLUDEPATH += "C:\Users\Kits\Documents\testplugin\test\mainwindow" HEADERS += \ testit.h \ interface.h SOURCES += \ testit.cpp TARGET = $$qtLibraryTarget(testplugin) EXAMPLE_FILES = PluginS.json DISTFILES += \ PluginS.json mainwindow.pro: QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = testit TEMPLATE = app CONFIG = release # The following define makes your compiler emit warnings if you use # any feature of Qt which has been marked as deprecated (the exact warnings # depend on your compiler). Please consult the documentation of the # deprecated API in order to know how to port your code away from it. DEFINES += QT_DEPRECATED_WARNINGS #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += \ main.cpp \ mainwindow.cpp HEADERS += \ mainwindow.h \ interface.h FORMS += \ mainwindow.ui QMAKE_PROJECT_NAME = mainwindow win32 { CONFIG(debug, release|debug):DESTDIR = ../debug/ CONFIG(release, release|debug):DESTDIR = ../release/ } else { DESTDIR = ../ } mainwindow.cpp: pluginsDir.cd("plugins"); foreach (QString fileName, pluginsDir.entryList(QDir::Files)) { QPluginLoader pluginLoader(pluginsDir.absoluteFilePath(fileName)); QObject *plugin = pluginLoader.instance(); qDebug()<<plugin;
I am getting plugin value as a QObject(0x0).I think plugin is not getting loaded.
-
Hi
you do something like sample ?bool EchoWindow::loadPlugin() { QDir pluginsDir(qApp->applicationDirPath()); #if defined(Q_OS_WIN) if (pluginsDir.dirName().toLower() == "debug" || pluginsDir.dirName().toLower() == "release") pluginsDir.cdUp(); #elif defined(Q_OS_MAC) if (pluginsDir.dirName() == "MacOS") { pluginsDir.cdUp(); pluginsDir.cdUp(); pluginsDir.cdUp(); } #endif pluginsDir.cd("plugins"); foreach (QString fileName, pluginsDir.entryList(QDir::Files)) { QPluginLoader pluginLoader(pluginsDir.absoluteFilePath(fileName)); QObject *plugin = pluginLoader.instance(); if (plugin) { echoInterface = qobject_cast<EchoInterface *>(plugin); if (echoInterface) return true; } } return false; }
you should output
http://doc.qt.io/qt-5/qpluginloader.html#errorStringand see if it gives a hint
-
@mrjj
here i am getting error of:"Failed to extract plugin meta data from 'C:/Users/Kits/Documents/build-ServerWithPlugin-Desktop_Qt_5_10_1_MSVC2017_64bit-Release/Server/.qmake.stash'" QObject(0x0) "Failed to extract plugin meta data from 'C:/Users/Kits/Documents/build-ServerWithPlugin-Desktop_Qt_5_10_1_MSVC2017_64bit-Release/Server/Makefile'" QObject(0x0) outside if "Failed to extract plugin meta data from 'C:/Users/Kits/Documents/build-ServerWithPlugin-Desktop_Qt_5_10_1_MSVC2017_64bit-Release/Server/Makefile.Debug'" QObject(0x0) "Failed to extract plugin meta data from 'C:/Users/Kits/Documents/build-ServerWithPlugin-Desktop_Qt_5_10_1_MSVC2017_64bit-Release/Server/Makefile.Release'" QObject(0x0) "Failed to extract plugin meta data from 'C:/Users/Kits/Documents/build-ServerWithPlugin-Desktop_Qt_5_10_1_MSVC2017_64bit-Release/Server/ui_broadcastmsg.h'" QObject(0x0) "Failed to extract plugin meta data from 'C:/Users/Kits/Documents/build-ServerWithPlugin-Desktop_Qt_5_10_1_MSVC2017_64bit-Release/Server/ui_mainwindow.h'"
-
is that what errorString gives ?
-
@mrjj yes
-
Sorry. no idea. Google gives nothing.
Check against the sample.
Must be some difference since that works.