problem mit moc

Alles rund um die Programmierung mit Qt
Antworten
copper
Beiträge: 11
Registriert: 6. Januar 2006 15:18

problem mit moc

Beitrag 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
copper
Beiträge: 11
Registriert: 6. Januar 2006 15:18

Beitrag von copper »

noch ein Nachtrag:

Code: Alles auswählen

QWidget *mw = new QWidget(); 
QPushButton *p = new QPushButton("Play", mw);   
Player2 *pl = new Player2();
DJPercy
Beiträge: 4
Registriert: 11. Januar 2006 13:03

Signal hat kein Parameter

Beitrag 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
copper
Beiträge: 11
Registriert: 6. Januar 2006 15:18

Beitrag 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
Antworten