std::vector mit Signal übergeben

Alles rund um die Programmierung mit Qt
Antworten
mase
Beiträge: 39
Registriert: 8. Mai 2007 00:17

std::vector mit Signal übergeben

Beitrag von mase »

Hallo!
Ich habe in meiner Klasse cMeasureThread folgendes Signal deklariert:

Code: Alles auswählen

    signals:
        void Graph_Changed(std::vector<unsigned> m_ElectrodeData, unsigned m_LowestElectrode, unsigned m_HighestElectrode);
Dann in der Klasse cDebugWindow (Objekt DebugWindow) so connected:

Code: Alles auswählen

 using std::vector;
...
   connect(m_MeasureThread, SIGNAL(Graph_Changed(vector<unsigned>, unsigned, unsigned)), SLOT(Graph_Changed(vector<unsigned>, unsigned, unsigned)));
Beim Starten des Programms erhalte ich die Meldung, dass es kein
solches Signal gibt:

Code: Alles auswählen

Object::connect: No such signal cMeasureThread::Graph_Changed(vector<uint>,uint,uint)
Object::connect:  (receiver name: 'DebugWindow')
Kann ich mit einem Signal keinen Vector übergeben?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Ich denke, daß moc von sich aus nicht mit Namespaces umgehen kann, also immer angeben oder nie...
-=Freaky=-
Beiträge: 503
Registriert: 29. Dezember 2006 22:54
Wohnort: HL

Beitrag von -=Freaky=- »

ja, das ganze funktioniert intern mit stringvergleichen, daher wird es wohl so sein, da hatte ich auch mal ein aehnliches problem mit ...

mfg,
julian
MiKla
Beiträge: 134
Registriert: 29. Juli 2007 15:29

Beitrag von MiKla »

Also ich habe es eben mit QVector probiert und damit geht es auch nicht, selber Fehler.
No such signal MainWindow::sendMessage(QVector<uint>)

Code: Alles auswählen

...
signals:
    void senMessage(QVector<unsigned>);

...
connect(this, SIGNAL(sendMessage(QVector<unsigned>)), this, SLOT(recvMessage(QVector<unsigned>)));
...
Michael
mase
Beiträge: 39
Registriert: 8. Mai 2007 00:17

Beitrag von mase »

Ich hab jetzt das std:: eingefügt. Die Meldung beim Programmstart ist
nun verschwunden. Doch nun ein neues Problem, wenn das Signal
gesendet werden soll:

Code: Alles auswählen

QObject::connect: Cannot queue arguments of type 'std::vector<uint>'
(Make sure 'std::vector<uint>' is registered using qRegisterMetaType().)
qRegisterMetaType ist für mich völlig neu, wie funktioniert das?
Oder soll ich versuchen, vorher einen QVector<unsigned> zu erstellen,
ihn mit dem Inhalt des std::vector füllen, und ihn zu übergeben?

Nachtrag: Mit QVector bekomm ich auch die Meldung mit
qRegisterMetaType.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Das steht sogar in der Doku von QObject::connect dabei...
mase
Beiträge: 39
Registriert: 8. Mai 2007 00:17

Beitrag von mase »

Jetzt hab ich

Code: Alles auswählen

qRegisterMetaType< std::vector<unsigned> >("std::vector<unsigned>");
eingefügt. Aber beim Kompilieren kommt der Fehler:

Code: Alles auswählen

measure_thread.h:38: error: too few template-parameter-lists
Das kann doch nicht so schwer sein, einen Vector zu übergeben.
mase
Beiträge: 39
Registriert: 8. Mai 2007 00:17

Beitrag von mase »

Ist mir noch nicht so ganz klar, aber jetzt geht es!
Ich hab

Code: Alles auswählen

qRegisterMetaType< std::vector<unsigned> >("std::vector<unsigned>");
in den Konstruktor von cMeasurementThread eingefügt.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Warum überhaupt einen std::vector<> benutzen und nicht die Qt-Container? Zumal es ja from/toStdVector() gibt.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
mase
Beiträge: 39
Registriert: 8. Mai 2007 00:17

Beitrag von mase »

Einen QVector hab ich auch schon probiert. Den muss ich auch
registrieren. Der Vector kommt aus einer nicht QT-Bibliothek, soll
nur von der GUI verarbeitet werden.
Ich sehe auf den ersten Blick auch keinen Sinn, warum es den
QVector überhaupt gibt. Ich sehe die selben Eigenschaften, wie beim
std::vector.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

QVector<> muss nicht registriert werden. Aber wenn es aus einer externen Lib kommt ist es so schon ok.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten