Signal an DLL-Slot senden
Verfasst: 24. November 2009 22:08
Hallo erstmal,
bin noch Anfänger mit Qt und habe folgendes Problem.
Ich hab mir eine DLL mit einem Slot erstellt, diesen Slot möchte ich nun mit einem Signal aus meiner Application verbinden, jedoch bekomme ich immer die Meldung:
"Object::connect: No such slot QLibrary::setValue(int) in .\sim_gui.cpp:52".
In der DLL befindet sich auch ein Fenster, dieses lässt sich ohne Probleme anzeigen, also ist die DLL ja anscheinend korrekt geladen.
Ich denke der Fehler ensteht schon beim Exportieren der DLL oder beim connect.
Vll kann mir hier ja jemand helfen.
Würde mich auf jedenfall freuen
MfG don
Hier mein Code:
DLL:
und die Application:
stelle hier mal nur den wichtigen Teil rein, valueSetter() ist als Signal deklariert.
Ich hoffe ich habe das richtig verstanden, dass qlib ein Zeiger auf die DLL Klasse ist?!
bin noch Anfänger mit Qt und habe folgendes Problem.
Ich hab mir eine DLL mit einem Slot erstellt, diesen Slot möchte ich nun mit einem Signal aus meiner Application verbinden, jedoch bekomme ich immer die Meldung:
"Object::connect: No such slot QLibrary::setValue(int) in .\sim_gui.cpp:52".
In der DLL befindet sich auch ein Fenster, dieses lässt sich ohne Probleme anzeigen, also ist die DLL ja anscheinend korrekt geladen.
Ich denke der Fehler ensteht schon beim Exportieren der DLL oder beim connect.
Vll kann mir hier ja jemand helfen.
Würde mich auf jedenfall freuen
MfG don
Hier mein Code:
DLL:
Code: Alles auswählen
q_test.h
#include <QtGui>
#include <QWidget>
#include <QString>
class __declspec(dllexport) MyScreen : public QWidget
{
Q_OBJECT
public:
MyScreen(QWidget *parent = 0);
MyScreen(int);
public slots:
void setValue(int);
};
#include "qt_test.h"
void MyScreen::setValue( int v ){
qDebug("\nWerte über Slots: %d",v);
}
MyScreen::MyScreen(QWidget *parent) : QWidget(parent){
setWindowFlags(Qt::Dialog);
setWindowModality(Qt::WindowModal);
resize(400,400);
setWindowTitle("Test Dll");
show();
}
MyScreen::MyScreen(int){
qDebug("\nDLL geladen ");
}
extern "C"{
__declspec(dllexport) QWidget* initMenu()
{
MyScreen* showya;
showya = new MyScreen;
return showya;
}
};stelle hier mal nur den wichtigen Teil rein, valueSetter() ist als Signal deklariert.
Code: Alles auswählen
#include <QtGui>
#include "sim_gui.h"
#include <QLibrary>
...................................
void sim_gui::valueSetter(int v){
emit valueSetted(v);
}
void sim_gui::load_dll() // Der wichtige Teil zum laden der DLL
{
typedef QWidget* (*MenuFunction)();
QLibrary *qlib = new QLibrary("qt_test");
if(qlib->load())
{
MenuFunction test = (MenuFunction) qlib->resolve("initMenu");
if(test)
test(); //aufruf konstruktor von test (DLL) - Fenster
connect(this,SIGNAL(valueSetted(int)),qlib, SLOT(setValue(int)));
}
}