'daki iki eklenti için sinyal/Slot etkileşimi Temel olarak iki eklentiyi ve connect
'u yükleyen küçük bir uygulamam var. Yüklendikten sonraki ilk eklenti, ana pencereye eklenecek herhangi bir başlık içermeyen bir etiket oluşturur. İkinci eklenti, bir menüye eklenecek bir eylem oluşturur. Yani benim app sadece bu eklentileri yüklemek için ve connect
onları gerekir. Onları birleştirerek ne demek istedim? Bu etiket eklentisinin etiketin başlığını değiştirecek bir slot içerdiğini ve eylem eklentisinin bildirilen bir sinyale sahip olduğunu kastediyorum. Uygulama, etiket yuvasına sahip connect
eylem eklentisi sinyali vermelidir. Tam olarak nasıl yapacağımı bilmiyorum. Tahminimce, eklenti sınıfı uygulamasında özel sinyali standart bir sinyale (tetiklenen) bağlamaktır. Ama yine de bu şekilde benim app beklediğim gibi çalışmıyor. Bir eklenti ve başka bir eklenti yuvasından bir sinyal için uygulamamda doğru bağlantıyı nasıl yapabilirim ??Qt
#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)
Eylem Eklenti:
#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)
i yüklemeye çalıştığınızda benim app, içinde
eklentileri i var:
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";
}
}
Bu muhtemelen büyük bir fark yaratmayacaktır, ancak belki de '_note' (_action, SIGNAL (pushMyAction())); ' –
konsol çıkışında herhangi bir bağlantı hatası almıyor musunuz? –
Qt5 'Q_EXPORT_PLUGIN2', kullanımdan kaldırıldı. – ManuelSchneid3r