ich schreibe zur zeit ein programm mit interprozesskommunikation und verwende dazu das QTDbus modul. Es funktioniert soweit auch alles einwandfrei. ich verwende sehr viele enums und möchte diese auch als parameter für die signals angeben! wenn ich diese jedoch verwende kommt es zu keinem aufruf meines zugeordneten slots... ersetz ich diesen enum durch ein int funktioniert es. ich nehme an das problem liegt an dem generierten interface und adapter. diese lasse ich nach definition in einer xml datei mit dem QtDBus XML compiler (qdbusxml2cpp) generieren. dort liegt auch schon mein erstes problem, ich weiß nicht wie ich einen eigenen datentyp angeben kann. Ich gebe in der regel ein int an und ändere per hand den typ in mein enum. Weiß jemand wie ich in dem XML korrekt meinen typ angeben kann?
Code: Alles auswählen
<signal name="playBackModeStatusSignal">
<arg name="status" type="i" direction="out"/>
</signal>
ein ausschnitt meiner klasse welche das signal vom interface dem slot zuweist:
Code: Alles auswählen
// enum liegt in einem seperaten header file...
class MediaPlayerProxy : public QObject
{
Q_OBJECT
Q_ENUMS (hs::EPlaybackMode)
public:
static MediaPlayerProxy& getInstance(EMPlayerInstanceId instanceId);
...
void playbackModeSet(const hs::EPlaybackMode& mode);
// Callbacks
public Q_SLOTS:
void playBackModeStatus(hs::EPlaybackMode state);
...
};
Q_DECLARE_METATYPE( hs::EPlaybackMode )
Code: Alles auswählen
connect(interface, SIGNAL(playBackModeStatusSignal(hs::EPlaybackMode)), this, SLOT(playBackModeStatus(hs::EPlaybackMode)));
Code: Alles auswählen
void MediaPlayerProxy::playbackModeSet(const hs::EPlaybackMode& mode)
{
interface->playbackModeSetDBusSlot(mode);
}
Code: Alles auswählen
//mode parameter hat noch keine bedeutung
void MediaPlayer::playbackModeSetDBusSlot(int mode)
{
cout << "---> playbackModeSetDBusSlot() called" << endl;
emit playBackModeStatusSignal(hs::PBM_RANDOM);
}
gruß
biski