Alles rund um die Programmierung mit Qt
Metzlmane
Beiträge: 13 Registriert: 23. März 2010 19:43
Kontaktdaten:
Beitrag
von Metzlmane » 31. August 2010 23:49
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?
Christian81
Beiträge: 7319 Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:
Beitrag
von Christian81 » 1. September 2010 06:27
Die komplette Fehlermeldung wäre nicht schlecht. Ich vermute Q_OBJECT wurde vergessen.
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
Metzlmane
Beiträge: 13 Registriert: 23. März 2010 19:43
Kontaktdaten:
Beitrag
von Metzlmane » 1. September 2010 09:22
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
Exasperation
Beiträge: 186 Registriert: 11. März 2009 18:00
Wohnort: VS
Beitrag
von Exasperation » 1. September 2010 09:41
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.
Metzlmane
Beiträge: 13 Registriert: 23. März 2010 19:43
Kontaktdaten:
Beitrag
von Metzlmane » 1. September 2010 09:46
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
)
Metzlmane
Beiträge: 13 Registriert: 23. März 2010 19:43
Kontaktdaten:
Beitrag
von Metzlmane » 1. September 2010 16:07
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
padreigh
Beiträge: 340 Registriert: 13. Mai 2010 10:06
Beitrag
von padreigh » 1. September 2010 18:32
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
Christian81
Beiträge: 7319 Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:
Beitrag
von Christian81 » 1. September 2010 19:13
Ein SIGNAL muss man nicht definieren...
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
MrAdams
Beiträge: 1 Registriert: 11. November 2010 18:33
Beitrag
von MrAdams » 12. November 2010 10:55
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