Anzeige:
Ergebnis 1 bis 7 von 7

Thema: Ärger mit XLib und QT: Will nicht kompilieren

  1. #1
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    719

    Ärger mit XLib und QT: Will nicht kompilieren

    Ich wollte da heut ein kleines Programm kompilieren, aber da kommen ganz abenteuerliche Fehlermeldungen:


    Code:
    #include <X11/X.h> // <-- Das ist schuld, ich weis, aber warum?
    #include <qslider.h>
    #include <qapplication.h>
    
    int main(int argc, char ** argv)
    {
     QApplication app(argc, argv);
     QSlider slider;
     app->setMainWidget(&slider);
     slider.show();
     return app.exec();
    }

    und dann kommt da das hier raus:

    Code:
    [axel@axel axel]$ g++ -L/home/axel/qt-x11-free-3.1.2/lib -I/home/axel/qt-x11-free-3.1.2/include slider.cpp
    slider.cpp:12:1: warning: no newline at end of file
    +In file included from /home/axel/qt-x11-free-3.1.2/include/qwindowdefs.h:45,
                     from /home/axel/qt-x11-free-3.1.2/include/qwidget.h:42,
                     from /home/axel/qt-x11-free-3.1.2/include/qslider.h:42,
                     from slider.cpp:2:
    /home/axel/qt-x11-free-3.1.2/include/qnamespace.h:711: parse error before `0'
    /home/axel/qt-x11-free-3.1.2/include/qnamespace.h:730: missing ';' before right brace
    /home/axel/qt-x11-free-3.1.2/include/qnamespace.h:734: `arrowCursor' declared as reference but not
    initialized
    /home/axel/qt-x11-free-3.1.2/include/qnamespace.h:735: `upArrowCursor' declared as reference but not
    initialized
    /home/axel/qt-x11-free-3.1.2/include/qnamespace.h:736: `crossCursor' declared 
    as reference but not initialized/home/axel/qt-x11-free-
    .1.2/include/qnamespace.h:737: `waitCursor' declared as reference but not
    und so geht das dann noch mehrere Seiten weiter. Offenbar stört X.h Qt beim kompilieren. Kann man irgendwie verhindern?

  2. #2
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Bist du dir sicher, das er X.h auch findet?

    Was ist, wenn du das include X.h nach den Qt includes schreibst?

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  3. #3
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    719
    Original geschrieben von anda_skoa
    Bist du dir sicher, das er X.h auch findet?
    Ziemlich, sonst sähe ja die Fehlermeldung anders aus. Außerdem findet er die Header, mit anderen Programmen geht es

    Original geschrieben von anda_skoa

    Was ist, wenn du das include X.h nach den Qt includes schreibst?
    Weis ich noch nicht. Ich kann das aber auch nicht anders machen, weil mein Programm in Wirklichkeit mit dem Qt-Designer entwickelt wird. Dem kan ich nich vorschreiben, in welcher Reihenfolge er die Header beim Erzeugen aus den .ui-Files inkludiert. Aber das ist doch ein interessantes Problem, zumal dieser Header ja von Qt auch irgendwo inkludiert werden muß.

  4. #4
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    719
    Ich hab den Fehler gefunden, aber das Problem noch nicht gelöst:

    Also, gcc meckert:

    Code:
    /home/axel/qt-x11-free-3.1.2/include/qnamespace.h:711: parse error before `0'
    Die entsprechende Zeile aus qnamespace.h sieht so aus:

    Code:
    enum CursorShape {
    Wo kommt die 0 her? In X.h steht folgendes:

    Code:
    #define CursorShape		0
    Das kann nicht gut gehen, aber wie kann man das lösen? Ich kriege noch mehr Ärger, weil z.B. folgendes auch nicht geht, wenn ich X.h inkludiere:
    Code:
     if(e->type() == QEvent::KeyRelease)
    weil auch eine #define das KeyRelease durch eine 3 ersetzt. Das fängt an, lustig zu werden.

  5. #5
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Hmm, ich hatte noch nie in einem UIC generierten Header ein X include.

    Wie kommt das da rein?

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  6. #6
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    719
    Nun, ich hab ein CustomWidget, das X.h braucht. Folglich steht in meinem Widgetheader diese Datei drinn. Da ich meine UI mit Qt-Designer baue, wird der Qt-Designer meine embedwidget.h auch in seine Formimplementation einbauen. Außerdem tritt das zweite Problem, was ich angesprochen habe, auch auf, wenn ich X.h ans Ende meiner inkludierungen setze, weil halt KeyRelease ersetzt wird. Ich werde wohl nicht drumrum kommen, das X-Zeug irgendwie auszukoppeln.

  7. #7
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Dürfte kein Problem sein, das Custom Widget später einzu bauen.

    Einfach an der Stelle einen Frame machen und den dann später als Parent verwenden.

    Du könntest dir auch QXEmbed ansehen:
    http://developer.kde.org/documentati...i/QXEmbed.html

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •