KIO::listDir() *gelöst*

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
petavonfrosta
Beiträge: 11
Registriert: 12. Februar 2012 20:25

KIO::listDir() *gelöst*

Beitrag von petavonfrosta »

Hallo,

ich habe erst vor kurzem mit der Programmierung in C++ und QT begonnen. Bin von daher noch nicht so fest im Sattel..
Ich bin gerade dabei ein Programm zuschreiben, welches ein Verzeichnisbaum in einem QTreeWidget darstellt. Ich
benutze dafür die QT Bibliotheken, Soweit ist auch alles OK, jedoch kann ich nicht mit kioslave Pfaden umgehen.
Dafür habe ich KIO::listDir gefunden. Jedoch ist die Dokumentation recht dürftig und praktische beispiele gibt es auch fast keine im Netz.
Der Code sieht folgender maßen aus:

Code: Alles auswählen

KIO::Job *kioJob = KIO::listDir(QString("file:///"));	
connect (kioJob, SIGNAL (entries(KIO::Job *, const KIO::UDSEntryList &)), this, SLOT (scanDirectory(KIO::Job *, const KIO::UDSEntryList &)));

Code: Alles auswählen

void KAudioCopy::scanDirectory(KIO::Job *job, const KIO::UDSEntryList &entryList) {
  for (int i = 0; i < entryList.count(); i++) {
    qDebug() << entryList.value(i).stringValue(KIO::UDSEntry::UDS_NAME);
  }
}
und hier die Fehlermeldung:
KAudioCopy.o: In function `KAudioCopy::initial_Places()':
KAudioCopy.cpp:(.text+0x1a38): undefined reference to `KUrl::KUrl(QString const&)'
KAudioCopy.cpp:(.text+0x1a4f): undefined reference to `KIO::listDir(KUrl const&, QFlags<KIO::JobFlag>, bool)'
KAudioCopy.cpp:(.text+0x1a5c): undefined reference to `KUrl::~KUrl()'
KAudioCopy.cpp:(.text+0x2155): undefined reference to `KUrl::~KUrl()'
KAudioCopy.o: In function `KAudioCopy::scanDirectory(KIO::Job*, QList<KIO::UDSEntry> const&)':
KAudioCopy.cpp:(.text+0x2619): undefined reference to `KIO::UDSEntry::stringValue(unsigned int) const'
collect2: ld returned 1 exit status
make: *** [KAudioCopy] Fehler 1
für euch ist es sicherlich ganz einfach, aber ich bin erst dabei C++ zu verstehen und hab da noch defiziete..
Kann mir jemand unter die Arme greifen?
vielen Dank schon mal...
Zuletzt geändert von petavonfrosta am 7. März 2012 06:42, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: KIO::listDir()

Beitrag von Christian81 »

Wenn man (KDE) Libraries benutzt muss man auch gegen diese linken.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
petavonfrosta
Beiträge: 11
Registriert: 12. Februar 2012 20:25

Re: KIO::listDir()

Beitrag von petavonfrosta »

Hi Christian,

danke erstmal. Ich habe gegen folgende KDE Bibliotheken gelinkt:

Code: Alles auswählen

#include "kapplication.h"
#include "kaboutdata.h"
#include "klocalizedstring.h"
#include "kmessagebox.h"
#include "kcmdlineargs.h"
#include "kmainwindow.h"
#include <kio/scheduler.h>
#include <kurl.h>
#include <kio/jobclasses.h>
fehlt da noch eine?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: KIO::listDir()

Beitrag von Christian81 »

Du hast gegen keine Bibliothek gelinkt sondern nur einige Header includiert... C++ Grundlagen
Siehe auch http://developer.qt.nokia.com/doc/qt-4. ... .html#libs
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
petavonfrosta
Beiträge: 11
Registriert: 12. Februar 2012 20:25

Re: KIO::listDir()

Beitrag von petavonfrosta »

Ich komme da irgendwie nicht weiter.
Es ist mir schon fast peinlich zu fragen, aber kann mir jemand sagen wie das geht?

Ich habe jetzt danach gegoogelt und keine konkrete pfad angabe gefunden.
Ich habe suse 12.1 und KDE 4.7.2. und nutze qmake.
In welchen Verzeichnis liegen die libraries die ich linken muß? bzw. wie lautet der
Eintag für die project Datei??
INCLUDEPATH += $(KDEDIR)/include
scheint nicht zu funktionieren, Da sich an meiner Fehlermeldung nichts geändert hat.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: KIO::listDir()

Beitrag von Christian81 »

Ok nocheinmal - Includes != Libaries !

Du musst z.B. gege libkdecore linken. Also LIBS += -lkdecore

Für qmake muss man das ganze Zeug händisch angeben. Wenn du cmake benutzen möchtest gibt es genug Tutorials hier: http://techbase.kde.org/Development/Tutorials
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
petavonfrosta
Beiträge: 11
Registriert: 12. Februar 2012 20:25

Re: KIO::listDir()

Beitrag von petavonfrosta »

Hallo,

nach einiger Zeit abstand und erneuten versuchen und rechergen komme ich immer noch nicht weiter.
ich bin jetzt auf cmake umgestiegen. und cmake läuft auch fehlerfrei durch. jedoch habe ich jetzt bei make während des linken
ein problem.

meine CMakeLists.txt

Code: Alles auswählen

project (KAudioCopy)
 
find_package(KDE4 REQUIRED)
include_directories( ${KDE4_INCLUDES} )
include (KDE4Defaults)

 
set(KAudioCopy_SRCS 
	main.cpp
	KAudioCopy.cpp
)
 
kde4_add_executable(KAudioCopy ${KAudioCopy_SRCS})
target_link_libraries( KAudioCopy ${KDE4_KDEUI_LIBS}) 
die ausgabe von make:

Code: Alles auswählen

Scanning dependencies of target KAudioCopy_automoc
[  0%] Built target KAudioCopy_automoc
Scanning dependencies of target KAudioCopy
[ 33%] Building CXX object CMakeFiles/KAudioCopy.dir/KAudioCopy_automoc.o
[ 66%] Building CXX object CMakeFiles/KAudioCopy.dir/main.o
/home/rene/Dokumente/gui/KAudioCopy/main.cpp:21:5: warning: unused parameter ‘argc’ [-Wunused-parameter]
/home/rene/Dokumente/gui/KAudioCopy/main.cpp:21:5: warning: unused parameter ‘argv’ [-Wunused-parameter]
[100%] Building CXX object CMakeFiles/KAudioCopy.dir/KAudioCopy.o
/home/rene/Dokumente/gui/KAudioCopy/KAudioCopy.cpp:347:6: warning: unused parameter ‘oldState’ [-Wunused-parameter]
/home/rene/Dokumente/gui/KAudioCopy/KAudioCopy.cpp:475:6: warning: unused parameter ‘job’ [-Wunused-parameter]
/home/rene/Dokumente/gui/KAudioCopy/KAudioCopy.cpp:481:6: warning: unused parameter ‘source’ [-Wunused-parameter]
/home/rene/Dokumente/gui/KAudioCopy/KAudioCopy.cpp:486:6: warning: unused parameter ‘newState’ [-Wunused-parameter]
/home/rene/Dokumente/gui/KAudioCopy/KAudioCopy.cpp:486:6: warning: unused parameter ‘oldState’ [-Wunused-parameter]
Linking CXX executable KAudioCopy
/usr/lib64/gcc/x86_64-suse-linux/4.6/../../../../x86_64-suse-linux/bin/ld: CMakeFiles/KAudioCopy.dir/KAudioCopy.o: undefined reference to symbol 'QDomElement::attribute(QString const&, QString const&) const'
/usr/lib64/gcc/x86_64-suse-linux/4.6/../../../../x86_64-suse-linux/bin/ld: note: 'QDomElement::attribute(QString const&, QString const&) const' is defined in DSO /usr/lib64/libQtXml.so.4 so try adding it to the linker command line
/usr/lib64/libQtXml.so.4: could not read symbols: Invalid operation
collect2: ld returned 1 exit status
make[2]: *** [KAudioCopy] Fehler 1
make[1]: *** [CMakeFiles/KAudioCopy.dir/all] Fehler 2
make: *** [all] Fehler 2
und ich weiß nicht in wieweit es eine rolle spielt. hier noch die project datei von qmake

Code: Alles auswählen

######################################################################
# Automatically generated by qmake (2.01a) So. Feb 5 20:13:07 2012
######################################################################

TEMPLATE = app
TARGET = 
DEPENDPATH += .
INCLUDEPATH += .
QT += phonon
QT += xml
LIBS += -lkdecore


# Input
HEADERS += KAudioCopy.h
FORMS += KAudioCopy.ui
SOURCES += KAudioCopy.cpp main.cpp
wenn ich das jetzt richtig verstehe, habe ich keinen fehler mehr, das KIO... nicht bekannt ist.
Was mich jedoch wundert ist, das der fehler beim linken auftritt.
werden bei cmake nicht die libaries automatisch dazu gelinkt, wenn "target_link_libraries( KAudioCopy ${KDE4_KDEUI_LIBS})" gesetzt ist?
oder muß bei verwendung von kde libaries aus einer QApplication eine KApplication gemacht werden?.. bzw. fehlen mir noch andere ahängigkeiten??
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: KIO::listDir()

Beitrag von Christian81 »

Wie Du (in der pro-Datei) schon mitbekommen hast musst Du QtXml benutzen. In der CMakeLists.txt sollte man also auch gegen QtXml linken...derzeit wird nur aufgrund der Abhängigkeiten der KDE Libraries zu Qt gegen die Qt-Libs gelinkt...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
petavonfrosta
Beiträge: 11
Registriert: 12. Februar 2012 20:25

Re: KIO::listDir()

Beitrag von petavonfrosta »

Danke für deine hilfe. Jetzt läuft es :)

Ich hatte jedoch das so verstanden, dass cmake das selbst auflösen kann.
Also hier nochmal zur info, für leute die vor dem selben problem stehen.
Man muß auch bei cmake alles selbst in die CMakeLists.txt schreiben.

so sieht nun meine CMakeLists.txt aus:

Code: Alles auswählen

project (KAudioCopy)
 
find_package(KDE4 REQUIRED)

include_directories( ${KDE4_INCLUDES} ${QT_INCLUDES})
include (KDE4Defaults)
find_package(Qt4 COMPONENTS QtCore QtGui QtXml QDebug QDir QFileInfo QString REQUIRED )
include(${QT_USE_FILE}) 

 
set(KAudioCopy_SRCS 
	main.cpp
	KAudioCopy.cpp
)
 
kde4_add_executable(KAudioCopy ${KAudioCopy_SRCS})
target_link_libraries( KAudioCopy ${KDE4_KDEUI_LIBS} ${QT_LIBRARIES} ${KDE4_PHONON_LIBS} ${KDE4_KIO_LIBS}) 
wichtig ist das Libraries in taget_link_libraries angegeben werden...
Antworten