में दो प्लग-इन के लिए/स्लॉट बातचीत तो बुनियादी तौर पर मैं एक छोटे से आवेदन है कि दो प्लगइन्स और उन्हें connect
लोड करता है। लोड होने के बाद पहली प्लगइन यह किसी भी शीर्षक के बिना एक लेबल बनाता है जिसे मुख्य विंडो में जोड़ा जाएगा। दूसरी प्लगइन एक क्रिया बनाता है जो मेनू में जोड़ा जाएगा। तो मेरे ऐप को इन प्लगइन्स को लोड करने और connect
को लोड करने की आवश्यकता है। उन्हें जोड़ने से मेरा क्या मतलब है? मेरा मतलब है कि लेबल प्लगइन में एक स्लॉट होता है जो लेबल के शीर्षक को संशोधित करेगा, और एक्शन प्लगइन में सिग्नल घोषित किया गया है। आवेदन connect
लेबल स्लॉट के साथ कार्रवाई प्लगइन संकेत होना चाहिए। मुझे नहीं पता कि यह वास्तव में कैसे करें। मेरा अनुमान है कि कार्रवाई प्लगइन वर्ग कार्यान्वयन में एक स्टैंडएट सिग्नल (ट्रिगर) के साथ कस्टम सिग्नल कनेक्ट करना है। लेकिन वैसे भी मेरे ऐप काम नहीं कर रहा है जैसा कि मैंने उम्मीद की थी। मैं एक प्लगइन से एक सिग्नल और किसी अन्य प्लगइन से स्लॉट के लिए अपने ऐप में एक सही कनेक्शन कैसे बना सकता हूं ??सिग्नल क्यूटी
यहाँ लेबल प्लगइन के लिए अपने कोड है:
#include "LabelInterface.h"
class LabelPlugin : public LabelInterface {
Q_OBJECT
Q_INTERFACES(LabelInterface)
public:
QLabel* label;
QLabel* newLabel();
LabelPlugin() {}
~LabelPlugin() {}
public slots:
void setTextforLabel();
};
#include <QtGui>
#include "LabelPlugin.h"
QLabel* LabelPlugin::newLabel() {
label = new QLabel("");
return label;
}
void LabelPlugin::setTextforLabel() {
label->setText("This plugin works fine");
}
// Exporta plugin-ul
Q_EXPORT_PLUGIN2 (labelplugin,LabelPlugin)
कार्रवाई प्लगइन:
#include "ActionInterface.h"
class ActionPlugin : public ActionInterface {
Q_OBJECT
Q_INTERFACES (ActionInterface)
public :
QAction* myAction;
QAction* newAction();
~ActionPlugin() {}
ActionPlugin() {}
public slots:
void send_signal();
signals :
void pushMyAction();
};
#include <QtGui>
#include "ActionPlugin.h"
QAction* ActionPlugin::newAction() {
myAction = new QAction("Show text",this);
return myAction;
}
void ActionPlugin::send_signal() {
qDebug()<<"Here";
QAction::connect (this,SIGNAL(pushMyAction()),this,SIGNAL(triggered()));
}
Q_EXPORT_PLUGIN2 (actionplugin,ActionPlugin)
मेरे ऐप है, जहां मैं लोड करने का प्रयास में प्लगइन्स मेरे पास है:
foreach (QString fileName, appDir.entryList(QDir::Files)) {
qDebug()<<QString(fileName);
QPluginLoader pluginLoader(appDir.absoluteFilePath(fileName));
QObject* plugin = pluginLoader.instance();
if (plugin) {
ActionInterface* myAction= qobject_cast<ActionInterface*>(plugin);
if (myAction) {
action_ = myAction;
pluginMenu->addAction(action_->newAction());
}
LabelInterface* myLabel = qobject_cast<LabelInterface*>(plugin);
if (myLabel) {
label_=myLabel;
layout->addWidget(label_->newLabel());
}
if (action_ && label_) {
qDebug()<<"both loaded";
action_->send_signal();
connect(action_, SIGNAL(pushMyAction()),label_, SLOT(setTextforLabel()));
}
else qDebug() << "seems one plugin is not loaded";
}
}
यह शायद कोई फर्क नहीं पड़ता है, लेकिन शायद 'लेबल _-> कनेक्ट (_action, SIGNAL (pushMyAction())); ' –
क्या आपको कंसोल आउटपुट पर कोई कनेक्ट त्रुटियां नहीं मिलती हैं? –
चूंकि Qt5 'Q_EXPORT_PLUGIN2' बहिष्कृत है। – ManuelSchneid3r