Seite 1 von 1

problem mit moc

Verfasst: 11. Januar 2006 15:54
von copper
hi ich möchte eine einfache String übergabe realisieren aber scheitere daran das ein die methode nicht als slot erkannt wird.

der fehler lautet:

QObject::connect: No such slot Player2::play_slot(pfad)
QObject::connect: (sender name: 'unnamed')
QObject::connect: (receiver name: 'unnamed')

hier die klasse:

Code: Alles auswählen

#ifndef PLAYER_HPP_
#define PLAYER_HPP_
#include<qobject.h>
#include<string>
using namespace std;

class Player2 : public QObject 
{
	Q_OBJECT
 public:
  Player2();
  ~Player2();
 public slots:
  void play_slot(string);
};
#endif /*PLAYER_HPP_*/
der Aufruf des QObjects:

Code: Alles auswählen

QObject::connect(p,SIGNAL(clicked()),pl,SLOT(play_slot(pfad)));
ich arbeite mit eclipse und dem C++ plugin
vor dem Compalieren des Quellcodes wird

moc -o moc_player2.cpp player2.hpp
durchgeführt
und moc_player2.cpp wird gelinkt

der compiler und linker geben keien Fehler aus

wenn ich play_slot ohne Parameter definiere funktioniert alles, die methode wird als slot erkannt

thx für die Antworten

Verfasst: 11. Januar 2006 15:56
von copper
noch ein Nachtrag:

Code: Alles auswählen

QWidget *mw = new QWidget(); 
QPushButton *p = new QPushButton("Play", mw);   
Player2 *pl = new Player2();

Signal hat kein Parameter

Verfasst: 11. Januar 2006 16:13
von DJPercy
Hallo,

du kannst nur ein Slot mit Parameter aufrufen wenn das
Signal auch ein Parameter übergibt.

z.B


QObject::connect(p,SIGNAL(clicked(pfad)),pl,SLOT(play_slot(pfad)));

Das standard clicked() SIGNAL hat leider keine Parameter somit kannst du auch nur ein Parameterlosen SLOT aufrufen

EDIT....

Wenn du den Button in einen ButtonGroup ablegst kannst du zumindestens den Button eine GroupID zuweisen und dann den das Signal mit:
QObject::connect(p,SIGNAL(clicked(int)),pl,SLOT(play_slot(int)));
aufrufen.

Vielleicht hilft das weiter.



Gruß Denis

Verfasst: 11. Januar 2006 16:57
von copper
Ja ich hatte das signal slot prinzip noch nicht so ganz verstanden
ich habe jetzt so abhilfe geschaffen

der pfad wird von dem Qlineedit übergeben

Code: Alles auswählen

Object::connect(le,SIGNAL(textChanged (const  QString& )),pl,SLOT(setString_slot(const QString&)));
immer wenn eine eingabe gemacht wird, wird der pfad übergeben

play_slot() kann nun damit arbeiten

thx