QT/KDE - Anfängerproblem - MenuBar



  • Hallo alle miteinander,

    ich habe derzeit ein Problem mit einem Beispiel-Programm aus einem Buch.
    Es handelt sich um das Buch "KDE- und QT-Programmierung, 2. Auflage" von Addison-Wesley.
    Es geht um das Beispiel-Programm aus Kapitel 2.3 - Das erste KDE-Programm.

    Ich schreibe lieber nicht die ganze Source hier rein, nachlesen kann man se hier: http://www.addison-wesley.de/media_remote/katalog/bsp/3827317533bsp.htm.

    So, mein Problem liegt nun in folgender Zeile:

    top->menuBar()->insertItem(i18n("&Help"),top->helpMenu());
    

    Mein Compiler (gcc 3.3.1, Suse 9.0) knallt mir folgende Fehlermeldung hin:

    kde1.cpp:28: error: invalid conversion from `KPopupMenu*´ to `int´
    kde1.cpp:28: error:    initializing argument 2 of `int
       QMenuData::insertItem(const QString&, int, int)´
    

    Leider bringt mir das derzeit nicht all zu viel.

    Wenn ich den hinteren Teil ("top->helpMenu());") einfach durch "0" ersetzte, so bekomme ich keinen Fehler, jedoch hat das Menü dann auch keine Funktion.

    Kann mit jemand einen Tip geben, wie ich diesen Fehler korrigieren kann.

    Danke im Voraus,

    Prof. MAAD

    P.S.:
    OS: Linux - SUSE 9.0
    QT-Version: 3.2.1 - Freie UNIX-Version
    KDE-Version: 3.1.4



  • prof_maad schrieb:

    Hallo alle miteinander,

    ich habe derzeit ein Problem mit einem Beispiel-Programm aus einem Buch.
    Es handelt sich um das Buch "KDE- und QT-Programmierung, 2. Auflage" von Addison-Wesley.
    Es geht um das Beispiel-Programm aus Kapitel 2.3 - Das erste KDE-Programm.

    Ich schreibe lieber nicht die ganze Source hier rein, nachlesen kann man se hier: http://www.addison-wesley.de/media_remote/katalog/bsp/3827317533bsp.htm.

    So, mein Problem liegt nun in folgender Zeile:

    top->menuBar()->insertItem(i18n("&Help"),top->helpMenu());
    

    Mein Compiler (gcc 3.3.1, Suse 9.0) knallt mir folgende Fehlermeldung hin:

    kde1.cpp:28: error: invalid conversion from `KPopupMenu*´ to `int´
    kde1.cpp:28: error:    initializing argument 2 of `int
       QMenuData::insertItem(const QString&, int, int)´
    

    Leider bringt mir das derzeit nicht all zu viel.

    Wenn ich den hinteren Teil ("top->helpMenu());") einfach durch "0" ersetzte, so bekomme ich keinen Fehler, jedoch hat das Menü dann auch keine Funktion.

    Kann mit jemand einen Tip geben, wie ich diesen Fehler korrigieren kann.

    Danke im Voraus,

    Prof. MAAD

    P.S.:
    OS: Linux - SUSE 9.0
    QT-Version: 3.2.1 - Freie UNIX-Version
    KDE-Version: 3.1.4

    Es kann sein, dass eines der Systeme veraltet ist. Entweder das Buch oder dein KDE. Wenn ich mir aber die Webseite anschaue, tippe ich auf das Buch. In KDE 3 hat sich die API geändert.



  • Danke erstmal für deine Antwort.

    Ich hatte auch schon den Gedanken, dass das Buch veraltet ist, denn es bezieht sich noch auf QT 2.2 und KDE 2.x .
    Jedoch gibt es meines Wissens nach keine neuere Auflage.

    Kann mir dann vieleicht einer ein aktuelles Buch / umfangreiches Tutorial zu diesem Thema empfehlen oder mir sagen, wie ich am besten raus bekomme, wie diese Funktion in KDE 3.x funktioniert?

    Danke im Voraus,

    Prof. MAAD



  • prof_maad schrieb:

    Danke erstmal für deine Antwort.

    Ich hatte auch schon den Gedanken, dass das Buch veraltet ist, denn es bezieht sich noch auf QT 2.2 und KDE 2.x .
    Jedoch gibt es meines Wissens nach keine neuere Auflage.

    Kann mir dann vieleicht einer ein aktuelles Buch / umfangreiches Tutorial zu diesem Thema empfehlen oder mir sagen, wie ich am besten raus bekomme, wie diese Funktion in KDE 3.x funktioniert?

    Danke im Voraus,

    Prof. MAAD

    Wenn du auf

    http://developer.kde.org/

    stöberst findest du viele dinge. Tutorials, ein neues Qt Buch (veraltet wenn Qt4 da ist), und auch die API Dokumentation zu den Klassen. Schnellen Zugriff auf die Doku hat man auch vom kdevelop aus.



  • So, ich habe mich jetzt eine Weile in der KDE-Doku umgesehen und auch die entsprechenden Stellen gefunden.
    Mein Problem besteht jedoch immer noch.

    Der neue Code (Der Ersatz für die nicht funktionierende Zeile) sieht nun wie folgt aus:

    KPopupMenu *help = top->helpMenu();
    top->menuBar()->insertItem( i18n("&Help"), help );
    

    Ich bekomme allerdings immernoch genau die gleiche Compiler-Fehlermeldung.

    Kann mir jemand vieleicht mal nen kleinen Beispiel-Code zeigen, wie ich in das Menü meines KMainWindow's nen Standart-KDE-Helpmenu reinbekomme. Ich wäre sehr dankbar dafür.

    Danke im Voraus,

    Prof. MAAD



  • Da du mit Suse installiert hast, solltest du eigentlich
    eine aktuelle Dokumentation auf deinem PC haben unter:

    /usr/share/doc/packages/qt3/html/index.html

    Hier gibt es auch Verweise auf Beispiele.

    Ich kenne leider auch das Problem mit den Büchern, die Linux-GUIs beschreiben
    aus eigener leidvoller Erfahrung: sie sind hoffnungslos veraltet.
    Egal um welches GUI-System es sich dabei handelt.
    Teilweise reagieren auch die Autoren nicht auf emails, wenn man auf einige
    Fehler in den Büchern hinweist.
    Ich hatte mir zwei Bücher gekauft und nach meinen Enttäuschungen lasse ich das Kaufen jetzt sein
    und nutze nur noch die online-Dokumentationen (und dieses Forum hier).

    Zu deinem Problem:
    die Dokumentation gibt folgendes Beispiel (Qt 3.x):

    QPopupMenu *file = new QPopupMenu( this );
    
            file->insertItem( p1, "&Open",  this, SLOT(open()), CTRL+Key_O );
            file->insertItem( p2, "&New", this, SLOT(news()), CTRL+Key_N );
    
            menu = new QMenuBar( this );
    
            menu->insertItem( "&File", file );
    

    //Added Codetags (evilissimo) ⚠ Bitte beachten: sfds ⚠



  • Könntest du mal den Code reinstellen, damit man den Fehler direkt sieht?



  • Hi Ponto,

    wegen dem Code:
    Der gesamte Code steht doch unter obigem Link zur Verfügung.

    Ich habe doch nur folgende Zeile:

    top->menuBar()->insertItem(i18n("&Help"),top->helpMenu());
    

    durch diese 2 ersetzt:

    KPopupMenu *help = top->helpMenu();
    top->menuBar()->insertItem( i18n("&Help"), help );
    

    Ciao,

    Prof. MAAD


Anmelden zum Antworten