Así que, básicamente, tengo una pequeña aplicación que carga dos complementos y connect
. El primer complemento después de cargarse crea una etiqueta sin ningún título que se agregará a la ventana principal. El segundo complemento crea una acción que se agregará a un menú. Entonces mi aplicación solo necesita cargar estos complementos y connect
. ¿Qué quiero decir conectándolos? me refiero a que el complemento de etiqueta contiene una ranura que modificará el título de la etiqueta, y el complemento de acción tiene una señal declarada. Aplicación debe connect
señal de complemento de acción con ranura de etiqueta. No sé cómo hacerlo exactamente. Supongo que en la implementación de la clase de plugin de acción es conectar la señal personalizada con una señal estándar (disparada). Pero de todos modos, mi aplicación no funciona como esperaba. ¿Cómo puedo hacer una conexión correcta en mi aplicación para obtener una señal de un complemento y una ranura de otro complemento?Interacción señal/ranura para dos complementos en Qt
Aquí está mi código para Plugin Etiqueta:
#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)
Acción Plugin:
#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)
En mi aplicación, donde trato de cargar plugins que tengo:
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";
}
}
Esto probablemente no hará ninguna diferencia, pero quizás intente 'label _-> connect (_action, SIGNAL (pushMyAction()));' –
¿No obtiene ningún error de conexión en la salida de la consola? –
Dado que Qt5 'Q_EXPORT_PLUGIN2' está en desuso. – ManuelSchneid3r