Seite 1 von 1
Signal <-> Slot collect2:ld returned 1 exit status
Verfasst: 31. August 2010 23:49
von Metzlmane
Hy Leute,
ich bin gerade ziemlich baff da ich versuche ein Child-Widget mit einem Parent Widget zu verknüpfen via Signal-Slot-Konzept. Bisher lief alles gut aber als ich versucht habe die Signal-Methode im Main-Widget zu erstellen bekam ich diese Fehlermeldung:
Meines Wissens kam diese bisher nur wenn ich 2 Namen/Variablen/Wasauchimmer gleich benannt habe. Laut Google ist es ein Linkerproblem.
Ich habe diese methode mal nach public slots kopiert und siehe da.. der Fehler war weg.
In meinem Qt-Buch steht dass Singals und Slots eigentilch nur ganz normale Methoden sind deswegen verstehe ich nicht warum der Fehler einmal erscheint und das andere mal nicht.
Es funktioniert auch unter Signals wenn ich die Deklaration der Methode auskommentiere in der allerdings nichts drin steht
Ich habe schon einiges Versucht aber ich komme auf keinen Ansatz an was es liegen könnte. Irgendwelche Ideen?
Verfasst: 1. September 2010 06:27
von Christian81
Die komplette Fehlermeldung wäre nicht schlecht. Ich vermute Q_OBJECT wurde vergessen.
Verfasst: 1. September 2010 09:22
von Metzlmane
Code: Alles auswählen
Führe Build-Schritte für Projekt Instaler aus...
Unveränderte Konfiguration, qmake-Schritt wird übersprungen.
Starte: "C:/Qt/2010.04/mingw/bin/mingw32-make.exe" -w
mingw32-make: Entering directory `C:/Users/aburon/Documents/Qt/First/Instaler-build-desktop'
C:/Qt/2010.04/mingw/bin/mingw32-make -f Makefile.Release
mingw32-make[1]: Entering directory `C:/Users/aburon/Documents/Qt/First/Instaler-build-desktop'
g++ -c -O2 -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"c:\Qt\2010.04\qt\include\QtCore" -I"c:\Qt\2010.04\qt\include\QtGui" -I"c:\Qt\2010.04\qt\include" -I"c:\Qt\2010.04\qt\include\ActiveQt" -I"release" -I"..\Instaler" -I"." -I"c:\Qt\2010.04\qt\mkspecs\win32-g++" -o release\Installer.o ..\Instaler\Installer.cpp
g++ -c -O2 -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"c:\Qt\2010.04\qt\include\QtCore" -I"c:\Qt\2010.04\qt\include\QtGui" -I"c:\Qt\2010.04\qt\include" -I"c:\Qt\2010.04\qt\include\ActiveQt" -I"release" -I"..\Instaler" -I"." -I"c:\Qt\2010.04\qt\mkspecs\win32-g++" -o release\main.o ..\Instaler\main.cpp
C:\Qt\2010.04\qt\bin\moc.exe -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"c:\Qt\2010.04\qt\include\QtCore" -I"c:\Qt\2010.04\qt\include\QtGui" -I"c:\Qt\2010.04\qt\include" -I"c:\Qt\2010.04\qt\include\ActiveQt" -I"release" -I"..\Instaler" -I"." -I"c:\Qt\2010.04\qt\mkspecs\win32-g++" -D__GNUC__ -DWIN32 ..\Instaler\Installer.h -o release\moc_Installer.cpp
g++ -c -O2 -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"c:\Qt\2010.04\qt\include\QtCore" -I"c:\Qt\2010.04\qt\include\QtGui" -I"c:\Qt\2010.04\qt\include" -I"c:\Qt\2010.04\qt\include\ActiveQt" -I"release" -I"..\Instaler" -I"." -I"c:\Qt\2010.04\qt\mkspecs\win32-g++" -o release\moc_Installer.o release\moc_Installer.cpp
g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-s -mthreads -Wl -Wl,-subsystem,windows -o release\Instaler.exe release/Installer.o release/main.o release/moc_Installer.o -L"c:\Qt\2010.04\qt\lib" -lmingw32 -lqtmain -lQtGui4 -lQtCore4
release/moc_Installer.o:moc_Installer.cpp:(.text+0x190): multiple definition of `Mainwindow::sendstringlist(QStringList)'
release/Installer.o:Installer.cpp:(.text+0x0): first defined here
collect2: ld returned 1 exit status
mingw32-make[1]: Leaving directory `C:/Users/aburon/Documents/Qt/First/Instaler-build-desktop'
mingw32-make: Leaving directory `C:/Users/aburon/Documents/Qt/First/Instaler-build-desktop'
mingw32-make[1]: *** [release\Instaler.exe] Error 1
mingw32-make: *** [release] Error 2
The Prozess "C:/Qt/2010.04/mingw/bin/mingw32-make.exe" wurde mit dem Rückgabewert %2 beendet.
Fehler beim Erstellen des Projekts Instaler (Ziel: Desktop)
Beim Ausführen des Build-Schritts 'Make'
Q_OBJECT steht drin
Verfasst: 1. September 2010 09:41
von Exasperation
Ich habe diese methode mal nach public slots kopiert und siehe da.. der Fehler war weg.
Also war dein Problem dann gelöst?
Deine Slots musst du als public Q_SLOTS deklarieren, das hat schon Sinn gemacht, dass du deine slot methode da reinkopiert hast, weil sie da eigentlich schon die ganze Zeit hätte drin stehen müssen
Wenn das hier
dein Slot ist, dann sollte es auch unter public Q_SLOTS auftauchen.
Verfasst: 1. September 2010 09:46
von Metzlmane
Tut mir leid aber ich versteh dich gerade nicht ganz
Code: Alles auswählen
class Mainwindow : public QMainWindow
{
Q_OBJECT
public:
Mainwindow(QMainWindow *parent = 0);
public slots:
void connectto();
private:
QScrollArea *sca_List,*sca_Sublist,*sca_Overall,*sca_Settings;
QLabel *label_title;
QPushButton *bn_exit,*bn_list,*bn_overall,*bn_settings,*bn_con;
QStringList sl1,sl2,sl3;
//! [Allgemeine Daten]
signals:
void sendstringlist(QStringList);
};
so steht es bisher drin in meiner Klasse aber das erzeugt einen Fehler und wenn ich das unter signals: nach public slots kopiere dann läuft es, das ist das was mich verwundert, denn anscheinend sagt er dass ich es doppelt definiere? (also nicht kopieren sondern verschieben

)
Verfasst: 1. September 2010 16:07
von Metzlmane
nun habe ich wirklich alles Auskommentiert und es bleibt nur die Klasse Mainwindow übrig, aber trotzdem kommt der gleiche Fehler immer wieder ..
brauche ich einen speziellen Eintrag in der .pro um Signals erstellen zu können?
Header:
Code: Alles auswählen
#include <QtGui>
#include <QMap>
#include <QApplication>
class Mainwindow : public QWidget
{
Q_OBJECT
public:
Mainwindow(QWidget *parent = 0);
public slots:
//void connectto();
private:
QScrollArea *sca_List,*sca_Sublist,*sca_Overall,*sca_Settings;
QLabel *label_title;
QPushButton *bn_exit,*bn_list,*bn_overall,*bn_settings,*bn_con;
QStringList sl1,sl2,sl3;
//! [Allgemeine Daten]
signals:
void gubl();
};
.CPP
Code: Alles auswählen
Mainwindow::Mainwindow(QWidget *parent) : QWidget(parent) {
}
void Mainwindow::gubl()
{
}
hab noch einiges Ausprobiert und das blieb übrig
Verfasst: 1. September 2010 18:32
von padreigh
Führe Build-Schritte für Projekt Instaler aus...
Unveränderte Konfiguration, qmake-Schritt wird übersprungen.
Starte: "C:/Qt/2010.04/mingw/bin/mingw32-make.exe" -w
mingw32-make: Entering directory `C:/Users/aburon/Documents/Qt/First/Instaler-build-desktop'
C:/Qt/2010.04/mingw/bin/mingw32-make -f Makefile.Release
mingw32-make[1]: Entering directory `C:/Users/aburon/Documents/Qt/First/Instaler-build-desktop'
g++ -c -O2 -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN
-I"c:\Qt\2010.04\qt\include\QtCore" -I"c:\Qt\2010.04\qt\include\QtGui" -I"c:\Qt\2010.04\qt\include" -I"c:\Qt\2010.04\qt\include\ActiveQt" -I"release" -I"..\Instaler" -I"." -I"c:\Qt\2010.04\qt\mkspecs\win32-g++"
-o release\Installer.o ..\Instaler\Installer.cpp
g++ -c -O2 -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN
-I"c:\Qt\2010.04\qt\include\QtCore" -I"c:\Qt\2010.04\qt\include\QtGui" -I"c:\Qt\2010.04\qt\include" -I"c:\Qt\2010.04\qt\include\ActiveQt" -I"release" -I"..\Instaler" -I"." -I"c:\Qt\2010.04\qt\mkspecs\win32-g++"
-o release\main.o ..\Instaler\main.cpp
C:\Qt\2010.04\qt\bin\moc.exe -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN
-I"c:\Qt\2010.04\qt\include\QtCore" -I"c:\Qt\2010.04\qt\include\QtGui" -I"c:\Qt\2010.04\qt\include" -I"c:\Qt\2010.04\qt\include\ActiveQt" -I"release" -I"..\Instaler" -I"." -I"c:\Qt\2010.04\qt\mkspecs\win32-g++"
-D__GNUC__ -DWIN32 ..\Instaler\Installer.h
-o release\moc_Installer.cpp
g++ -c -O2 -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN
-I"c:\Qt\2010.04\qt\include\QtCore" -I"c:\Qt\2010.04\qt\include\QtGui" -I"c:\Qt\2010.04\qt\include" -I"c:\Qt\2010.04\qt\include\ActiveQt" -I"release" -I"..\Instaler" -I"." -I"c:\Qt\2010.04\qt\mkspecs\win32-g++"
-o release\moc_Installer.o release\moc_Installer.cpp
g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-s -mthreads -Wl -Wl,-subsystem,windows
-o release\Instaler.exe release/Installer.o release/main.o release/moc_Installer.o
-L"c:\Qt\2010.04\qt\lib" -lmingw32 -lqtmain -lQtGui4 -lQtCore4
release/moc_Installer.o:moc_Installer.cpp:(.text+0x190): multiple definition of `Mainwindow::sendstringlist(QStringList)'
release/Installer.o:Installer.cpp:(.text+0x0): first defined here
collect2: ld returned 1 exit status
include guards und irgendwas merkwürdig eingebunden? Ansonsten mach mal n make clean, und qmake das ganze neu ... vielleicht haste noch irgendwelche object Leichen
Verfasst: 1. September 2010 19:13
von Christian81
Ein SIGNAL muss man nicht definieren...
Verfasst: 12. November 2010 10:55
von MrAdams
Hallo Metzelmane.
Hab mir vor ein paar Tagen auch QT installiert und genau den gleichen Fehler bekommen.
Ausgelöst wurde der durch das QWebView Objekt und ich hab das Inet dies bezüglich "durchgoogled" das einem schwindelig wird.
Am Ende fand ich raus das in der .pro Datei folgendes fehlte:
QT += core gui
QT += webkit
In der .cpp Datei fehlte zudem der include
#include <QtWebKit>
Danach bekam ich den Fehler nicht mehr.
Hoffe Dir geholfen zu haben.
Gruß
Ein QT Frischling
