QT3

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
nixdorf
Beiträge: 450
Registriert: 12.11.2004 09:38:34

QT3

Beitrag von nixdorf » 18.01.2005 14:36:28

Hallo,

Ich möchte gerne ein paar kleine qt3 / kde - programme entwickeln. Das Klassische Hello World habe ich bereits kompiliert und gestarted.

Nun wollte ich das ganze mal mit einem Programm aus einem bekannten Lehrbuch (KHelloWorld) machen.

Code: Alles auswählen


#include <kaction.h>
#include <kapp.h>
#include <kcmdlineargs.h>
#include <klocale.h>
#include <kmainwindow.h>
#include <kmenubar.h>
#include <kstdaction.h>
#include <qlabel.h>
#include <qpopupmenu.h>

int main (int argc, char **argv)
{
	QString aboutText ("KDE- und Qt-Programmierung\n"
	                   "(c) 2000 Addison-Wesley-Germany");
	
	
	KApplication app;
	
	KMainWindow *top = new KMainWindow ();
	
	QPopupMenu *filePopup = new QPopupMenu (top);
	
	

	top->menuBar()->insertItem (i18n ("&File"), filePopup);
	top->menuBar()->insertSeparator();
	
	
	QLabel *text = new QLabel (i18n ("<H1>Hello, World!</H1>"), top);
	top->setCentralWidget (text);	
	top->show();
	
	return app.exec();
}


also ein einfaches Programm, aber wenn ich es versuche mit:

gcc khelloworld.cpp -o khelloword -I /usr/include/kde -I /usr/include/qt -Lkdeui -lkdecore -lqt

zu komplieren, dann bekomme ich ellenlage fehlermeldungen.
Wie kann das kommen? Ich meine ich habe alle notwendigen Packete installiert oder fehlen noch welche?

Gruß Nixdorf


HIer nochmal die Felermeldungen:

                  von khelloworld.cpp:7:
/usr/include/kde/kactionclasses.h:32:26: qkeysequence.h: Datei oder Verzeichnis nicht gefunden
/usr/include/kde/kactionclasses.h:33:21: qobject.h: Datei oder Verzeichnis nicht gefunden
/usr/include/kde/kactionclasses.h:34:24: qvaluelist.h: Datei oder Verzeichnis nicht gefunden
/usr/include/kde/kactionclasses.h:35:25: qguardedptr.h: Datei oder Verzeichnis nicht gefunden
In file included from /usr/include/kde/kaction.h:624,
                 from khelloworld.cpp:7:
/usr/include/kde/kactionclasses.h: At global scope:
/usr/include/kde/kactionclasses.h:70: error: Fehler beim Parsen before `READ'
/usr/include/kde/kactionclasses.h:185: error: Fehler beim Parsen before `:'
   token
/usr/include/kde/kactionclasses.h:197: error: Syntaxfehler before `:' token
/usr/include/kde/kactionclasses.h:68: Warnung: `class KToggleAction' only
   defines a private destructor and has no friends
/usr/include/kde/kactionclasses.h:214: error: Syntaxfehler before `public'
/usr/include/kde/kactionclasses.h:313: error: Fehler beim Parsen before `READ'
/usr/include/kde/kactionclasses.h:423: error: ISO C++ forbids declaration of `
   QStringList' with no type
/usr/include/kde/kactionclasses.h:423: error: `QStringList' declared as a
   `virtual' field
/usr/include/kde/kactionclasses.h:423: error: Fehler beim Parsen before `('
   token
/usr/include/kde/kactionclasses.h:470: error: Fehler beim Parsen before `:'
   token
/usr/include/kde/kactionclasses.h:482: error: Fehler beim Parsen before `&'
   token
/usr/include/kde/kactionclasses.h:511: error: Fehler beim Parsen before `)'
   token
/usr/include/kde/kactionclasses.h:518: error: Syntaxfehler before `:' token
/usr/include/kde/kactionclasses.h:311: Warnung: `class KSelectAction' only
   defines a private destructor and has no friends
/usr/include/kde/kactionclasses.h:555: error: Syntaxfehler before `public'
/usr/include/kde/kactionclasses.h:642: error: Fehler beim Parsen before `:'
   token
/usr/include/kde/kactionclasses.h:553: Warnung: `class KListAction' only
   defines a private destructor and has no friends
/usr/include/kde/kactionclasses.h:669: error: `uint' was not declared in this
   scope
/usr/include/kde/kactionclasses.h:669: error: Fehler beim Parsen before `READ'
/usr/include/kde/kactionclasses.h:695: error: type specifier omitted for
   parameter `uint'
/usr/include/kde/kactionclasses.h:695: error: Fehler beim Parsen before `='
   token
/usr/include/kde/kactionclasses.h:707: error: type specifier omitted for
   parameter `uint'
/usr/include/kde/kactionclasses.h:707: error: Fehler beim Parsen before `='
   token
/usr/include/kde/kactionclasses.h:719: error: type specifier omitted for
   parameter `uint'
/usr/include/kde/kactionclasses.h:719: error: Fehler beim Parsen before `='
   token
/usr/include/kde/kactionclasses.h:735: error: type specifier omitted for
   parameter `uint'
/usr/include/kde/kactionclasses.h:735: error: Fehler beim Parsen before `='
   token
/usr/include/kde/kactionclasses.h:751: error: type specifier omitted for
   parameter `uint'
/usr/include/kde/kactionclasses.h:751: error: Fehler beim Parsen before `='
   token
/usr/include/kde/kactionclasses.h:759: error: type specifier omitted for
   parameter `uint'
/usr/include/kde/kactionclasses.h:759: error: Fehler beim Parsen before `='
   token
/usr/include/kde/kactionclasses.h:771: error: Fehler beim Parsen before `)'
   token
/usr/include/kde/kactionclasses.h:821: error: Syntaxfehler before `:' token
/usr/include/kde/kactionclasses.h:667: Warnung: `class KRecentFilesAction' only
   defines a private destructor and has no friends
/usr/include/kde/kactionclasses.h:800: error: incomplete type `QString' does
   not have member `null'
/usr/include/kde/kactionclasses.h:791: error: incomplete type `QString' does
   not have member `null'
/usr/include/kde/kactionclasses.h:852: error: Fehler beim Parsen before `READ'
/usr/include/kde/kactionclasses.h:879: error: Fehler beim Parsen before `:'
   token
/usr/include/kde/kactionclasses.h:850: Warnung: `class KFontAction' only
   defines a private destructor and has no friends
/usr/include/kde/kactionclasses.h: In member function `QString
   KFontAction::font() const':
/usr/include/kde/kactionclasses.h:873: error: return type `struct QString' is
   incomplete
/usr/include/kde/kactionclasses.h:433: error: `virtual QString
   KSelectAction::currentText() const' is private
/usr/include/kde/kactionclasses.h:874: error: within this context
/usr/include/kde/kactionclasses.h:874: error: invalid use of undefined type `
   struct QString'
/usr/include/kde/kglobal.h:33: error: forward declaration of `struct QString'
/usr/include/kde/kactionclasses.h: At global scope:
/usr/include/kde/kactionclasses.h:892: error: Fehler beim Parsen before `READ'
/usr/include/kde/kactionclasses.h:914: error: Fehler beim Parsen before `:'
   token
/usr/include/kde/kactionclasses.h:922: error: Syntaxfehler before `:' token
/usr/include/kde/kactionclasses.h:890: Warnung: `class KFontSizeAction' only
   defines a private destructor and has no friends
/usr/include/kde/kaction.h: In member function `virtual void
   KFontSizeAction::slotActivated()':
/usr/include/kde/kaction.h:547: error: `virtual void KAction::slotActivated()'
   is private
/usr/include/kde/kactionclasses.h:920: error: within this context
/usr/include/kde/kactionclasses.h: At global scope:
/usr/include/kde/kactionclasses.h:950: error: Fehler beim Parsen before `READ'
/usr/include/kde/kactionclasses.h:948: Warnung: `class KActionMenu' only
   defines a private destructor and has no friends
/usr/include/kde/kactionclasses.h:1023: error: Fehler beim Parsen before `READ'
/usr/include/kde/kactionclasses.h:1021: Warnung: `class KToolBarPopupAction'
   only defines a private destructor and has no friends
/usr/include/kde/kactionclasses.h:1145: error: Syntaxfehler before `public'
/usr/include/kde/kactionclasses.h:1162: error: Fehler beim Parsen before `:'
   token
/usr/include/kde/kactionclasses.h:1166: error: 'QCString' is used as a type,
   but is not defined as a type.
/usr/include/kde/kactionclasses.h:1167: error: 'QGuardedPtr' is used as a type,
   but is not defined as a type.
/usr/include/kde/kactionclasses.h:1143: Warnung: `class KToggleToolBarAction'
   only defines a private destructor and has no friends
/usr/include/kde/kactionclasses.h: In member function `KToolBar*
   KToggleToolBarAction::toolBar()':
/usr/include/kde/kactionclasses.h:1160: error: `m_toolBar' undeclared (first
   use this function)
/usr/include/kde/kactionclasses.h: At global scope:
/usr/include/kde/kactionclasses.h:1190: error: Syntaxfehler before `public'
/usr/include/kde/kactionclasses.h:1210: error: Fehler beim Parsen before `:'
   token
/usr/include/kde/kactionclasses.h:1216: error: type specifier omitted for
   parameter `QEvent'
/usr/include/kde/kactionclasses.h:1216: error: Fehler beim Parsen before `*'
   token
/usr/include/kde/kactionclasses.h:1188: Warnung: `class KToggleFullScreenAction
   ' only defines a private destructor and has no friends
/usr/include/kde/kactionclasses.h:1234: error: Syntaxfehler before `public'
/usr/include/kde/kactionclasses.h:1263: error: Fehler beim Parsen before `:'
   token
/usr/include/kde/kactionclasses.h:1266: error: 'QGuardedPtr' is used as a type,
   but is not defined as a type.
/usr/include/kde/kactionclasses.h:1232: Warnung: `class KWidgetAction' only
   defines a private destructor and has no friends
/usr/include/kde/kactionclasses.h: In member function `QWidget*
   KWidgetAction::widget()':
/usr/include/kde/kactionclasses.h:1249: error: `m_widget' undeclared (first use
   this function)
/usr/include/kde/kactionclasses.h: At global scope:
/usr/include/kde/kactionclasses.h:1278: error: Syntaxfehler before `public'
/usr/include/kde/kactionclasses.h:1276: Warnung: `class KActionSeparator' only
   defines a private destructor and has no friends
/usr/include/kde/kactionclasses.h:1304: error: Syntaxfehler before `public'
/usr/include/kde/kactionclasses.h:1340: error: Fehler beim Parsen before `:'
   token
/usr/include/kde/kactionclasses.h:1302: Warnung: `class KPasteTextAction' only
   defines a private destructor and has no friends
In Datei, eingefügt von /usr/include/kde/kapp.h:5,
                    von khelloworld.cpp:8:
/usr/include/kde/kapplication.h:40:26: qapplication.h: Datei oder Verzeichnis nicht gefunden
/usr/include/kde/kapplication.h:41:21: qpixmap.h: Datei oder Verzeichnis nicht gefunden
In file included from /usr/include/kde/kapp.h:5,
                 from khelloworld.cpp:8:

usw...

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Re: QT3

Beitrag von gms » 18.01.2005 17:09:03

wahrscheinlich fehlt dir das Paket "libqt3-headers"

nixdorf
Beiträge: 450
Registriert: 12.11.2004 09:38:34

Beitrag von nixdorf » 18.01.2005 17:38:24

Leider nicht, das Packet libqt3-headers ist installiert

gruß Nixdorf

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 18.01.2005 17:42:25

dann fehlt dir das richtige "-I<includedir>" beim gcc Aufruf

[edit]

kannst ja einmal nach einer der Dateien suchen

Code: Alles auswählen

find /usr/include -name "qkeysequence.h"
[/edit]

Benutzeravatar
peschmae
Beiträge: 4844
Registriert: 07.01.2003 12:50:33
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: nirgendwo im irgendwo

Beitrag von peschmae » 18.01.2005 19:38:18

Also, sind gleich recht viele Sachen aufs mal die ich Ändern musste damits bei mir ging:

1) bei mir heisst die Qt-Bibliothek libqt-mt, also -lqt-mt angeben (nicht zwingend, kannst auch die nicht-mt-Bibliothek haben, aber ab qt3 ist -mt default und bei Debian zumindest heist die Lib dann auch so
2) -lkdeui und nicht -Lkdeui, -l heisst "diese Lib linken", -L heisst "in diesem Verzeichnis hats sonst auch noch libs"
3) -I /usr/include/qt heisst bei mir /usr/include/qt3

Das war schon alles. Im übringen würde ich QMake verwenden um mit den blöden Compilerkommandozeilen zu dealen. Viel bequemer.

Ach ja, und poste bitte zukünftig nicht mehr so ellenlange Fehlermeldungen. Ein kurzer Ausschnitt hätte gereicht - und wenns mal länger wird kannst du den Rest gut nach http://nopaste.debianforum.de auslagern

MfG Peschmä
"er hätte nicht in die usa ziehen dürfen - die versauen alles" -- Snoopy

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 18.01.2005 19:48:22

wenn wir schon dabei sind:
"g++" statt "gcc" wenn du c++ code compilierst

nixdorf
Beiträge: 450
Registriert: 12.11.2004 09:38:34

Beitrag von nixdorf » 18.01.2005 20:17:32

dank Euch für Eure Hilfe, compilieren kann ich jetzt mit:

g++ khelloworld.cpp -o khelloword -I /usr/include/kde -I /usr/include/qt3 -lkdeui -lkdecore -lqt-mt

khelloworld wird erstellt, doch leider passiert nichts wenn man die Datei anklickt

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 18.01.2005 20:28:04

kann es sein, daß
"app.setMainWidget(top);" fehlt ?

nixdorf
Beiträge: 450
Registriert: 12.11.2004 09:38:34

Beitrag von nixdorf » 18.01.2005 20:31:06

Stop Stop,

so ganz doch noch nicht,

nach dem kompiliren bekomme ich noch folgendes zu hören:

khelloworld.cpp: In function `int main(int, char**)':
khelloworld.cpp:21: Warnung: `init' is deprecated (declared at
/usr/include/kde/kcmdlineargs.h:258)
/usr/include/kde/kstdaction.h:262: error: too few arguments to function `
KAction* KStdAction::quit(const QObject*, const char*, KActionCollection*,
const char*)'
khelloworld.cpp:28: error: at this point in file
khelloworld.cpp:33: error: invalid conversion from `KPopupMenu*' to `int'
khelloworld.cpp:33: error: initializing argument 2 of `int
QMenuData::insertItem(const QString&, int, int)'

Gruß Nixdorf

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 18.01.2005 20:51:57

das bekomme ich:

Code: Alles auswählen

gms@gms1:~$g++ khelloworld.cpp -o khelloword -I /usr/include/kde -I /usr/include/qt3 -lkdeui -lkdecore -lqt-mt
gms@gms1:~$./khelloword 

FAILURE (KCmdLineArgs):
Application has not called KCmdLineArgs::init(...).
also kompilieren tut es bei mir ( ich habe eine ziemlich aktuelle saubere sarge version)

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 18.01.2005 21:02:42

nach folgender Änderung hat es gefunkt:

Code: Alles auswählen

#include <kaboutdata.h>

int main (int argc, char **argv)
{
        KAboutData aboutData("app","prog","ver");
        KCmdLineArgs::init(&aboutData);


nixdorf
Beiträge: 450
Registriert: 12.11.2004 09:38:34

Beitrag von nixdorf » 18.01.2005 21:45:59

klappt leider immer noch nicht bei mir, nach dem kopelieren mit:

g++ khelloworld.cpp -o khelloword -I /usr/include/kde -I /usr/include/qt3 -lkdeui -lkdecore -lqt-mt

bekomme ich:

/usr/include/kde/kstdaction.h: In function `int main(int, char**)':
/usr/include/kde/kstdaction.h:262: error: too few arguments to function `
KAction* KStdAction::quit(const QObject*, const char*, KActionCollection*,
const char*)'
khelloworld.cpp:30: error: at this point in file
khelloworld.cpp:35: error: invalid conversion from `KPopupMenu*' to `int'
khelloworld.cpp:35: error: initializing argument 2 of `int
QMenuData::insertItem(const QString&, int, int)'

die Änderungen habe ich im script vorgenommen:

...

#include <kaboutdata.h>


int main (int argc, char **argv)
{
KAboutData aboutData("app","prog","ver");
QString aboutText ("KDE- und Qt-Programmierung\n"
"(c) 2000 Addison-Wesley-Germany");
KCmdLineArgs::init(&aboutData);
KApplication app;
usw ...

Gruß Nixdorf

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 18.01.2005 22:11:34

Es ist schwer Compilier Fehler zu finden, ohne den aktuellen Stand des Source Codes zu haben. Die "invalid conversion" Fehlermeldung (in Zeile 35) besagt, daß du mit einem KPopupMenu nicht richtig umgehst. In dem von dir geposteten Teilen gibt es aber kein KPopupMenu.
Ein richtiger Programmierer liest zuerst die Doku bevor er eine Funktion verwendet. Ich befürchte, daß wird auch dir nicht erspart bleiben.
Und wenn du nur irgenwelche Beispiele reinklopfen willst, solltest du dir genau die Version der Libraries holen, auf die sich diese Beispiele beziehen.

nixdorf
Beiträge: 450
Registriert: 12.11.2004 09:38:34

Beitrag von nixdorf » 19.01.2005 13:26:48

Hallo,

ok, wo find ich denn die dokus zu den libarys die ich installiert habe und im programm nutze?

Gruß Nixdorf

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 19.01.2005 13:56:08

Code: Alles auswählen

apt-get install qt3-doc kdelibs4-doc
eventuell auch "stl-manual"

Du könntest dir auch KDevelop anschauen

Code: Alles auswählen

apt-get install kdevelop3 kdevelop3-doc

nixdorf
Beiträge: 450
Registriert: 12.11.2004 09:38:34

Beitrag von nixdorf » 19.01.2005 14:06:03

was ist mit qt3-assistant?

habe ich gerade installiert. kann es zwar nicht starten, aber in den beschreibungesn des deb's sah es ganz danach aus als wenn es das richtige programm für mich wäre.

Gruß Nixdorf

nixdorf
Beiträge: 450
Registriert: 12.11.2004 09:38:34

Beitrag von nixdorf » 19.01.2005 14:41:07

Hallo,

ja prima Kdevelop habe ich mit mal angeschaut, wenn ich mir dort die Dokumentationsbücher ansschaue, dann kann ich fast alle Bücher einsehen, zwar nur auf englisch aber das geht. Nur die Bücher der KDE/QT Libraries sind bei mir leer. Ich kann nun mittlerweile aber auch kein Kde/qt - doc mehr finden das ich ich nicht installiert habe.

Gruß Nixdorf

Antworten