Anzeige:
Ergebnis 1 bis 12 von 12

Thema: erste Schritte mit Qt

  1. #1
    Registrierter Benutzer
    Registriert seit
    21.06.2003
    Beiträge
    15

    erste Schritte mit Qt

    ich habe mir auf Suse8 mit Yast2 das Qt-Devel Paket installiert. Doku und Binärcode finde ich unter usr/lib/qt3... Jetzt habe ich ein "hello world" Beispiel aus dem Tutorial in mein home/jv/qtest Verzeichnis kopiert, welches natürlich Header Dateien aus der Qtlib benoetigt. Dazu empfiehlt es sich (angeblich) ein Makefile mit dem qmake utility zu erzeugen. Die Erzeugung eines Projektfiles mit qmake -projektname funktioniert noch und erzeugt mit ein qt.pro file. Beim nächsten Aufruf meldet qmake jedoch "qmakespec has not been set". Wo ist dies und wo ist dies einzustellen (sorry für die vielleicht etwas zu einfache Frage aber ich habe einfach keine Ahnung)

  2. #2
    Registrierter Benutzer Avatar von tuxipuxi
    Registriert seit
    30.08.2002
    Beiträge
    667
    hi,

    QMAKESPEC ist eine system umgebungsvariable, die du fuer dein system setzen musst. in deinem fall ist es linux-g++.

    also musst du export QMAKESPEC=linux-g++ machen.

    wenn du das nicht jedesmal eintippen moechtest, schreibst du das am besten in deine ~/.bashrc, dann wird das bei jeder anmeldung automatisch gesetzt.

    gruss,

    tuxipuxi.

  3. #3
    Registrierter Benutzer
    Registriert seit
    21.06.2003
    Beiträge
    15
    Es geht leider nicht. Hier eine Kopie aus dem Terminal.
    Könnte das ein Problem mit dem Suchpfad sein?
    Kannst du einen anderen Fehler sehen?

    jv@suse8:~/qt> QMAKESPEC=linux-g++
    jv@suse8:~/qt> /usr/lib/qt-3.0.3/bin/qmake
    QMAKESPEC has not been set, so configuration cannot be deduced.
    Error processing project file: qt.pro
    jv@suse8:~/qt> /usr/lib/qt-3.0.3/bin/qmake qt.pro
    QMAKESPEC has not been set, so configuration cannot be deduced.
    Error processing project file: qt.pro
    jv@suse8:~/qt> cat qt.pro
    ################################################## ####################
    # Automatically generated by qmake (1.02a) Tue Nov 4 20:15:40 2003
    ################################################## ####################

    TEMPLATE = app
    CONFIG -= moc

    # Input
    SOURCES += qtest.c
    jv@suse8:~/qt>

  4. #4
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Das Problem ist nicht QMAKESPEC sondern ein nicht (korrekt) gesetztes QTDIR

    export QTDIR=/usr/lib/qt-3.0.3

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  5. #5
    Registrierter Benutzer Avatar von tuxipuxi
    Registriert seit
    30.08.2002
    Beiträge
    667
    du hast auch noch das "export" vor dem QMAKESPEC vergessen.

  6. #6
    Registrierter Benutzer
    Registriert seit
    21.06.2003
    Beiträge
    15
    das Makefile krieg ich jetzt mit:

    jv@suse8:~/qt> cat Makefile
    ################################################## ###########################
    # Makefile for building: qt
    # Generated by qmake (1.02a) on: Wed Nov 5 12:24:08 2003
    # Project: qt.pro
    # Template: app
    # Command: $(QMAKE) qt.pro
    ################################################## ###########################
    ####### Compiler, tools and options
    CC = gcc
    CXX = g++
    LEX = flex
    YACC = yacc
    CFLAGS = -pipe -Wall -W $(RPM_OPT_FLAGS) -DQT_NO_DEBUG
    CXXFLAGS = -pipe -Wall -W $(RPM_OPT_FLAGS) -DQT_NO_DEBUG
    LEXFLAGS =
    YACCFLAGS= -d
    INCPATH = -I$(QTDIR)/include -I$(QTDIR)/mkspecs/linux-g++
    LINK = g++
    LFLAGS =
    LIBS = $(SUBLIBS) -L/usr/X11R6/lib -lXext -lX11 -lm
    AR = ar cqs
    RANLIB =
    MOC = $(QTDIR)/bin/moc
    UIC = $(QTDIR)/bin/uic
    QMAKE = qmake
    TAR = tar -cf
    GZIP = gzip -9f
    COPY = cp -f
    COPY_FILE= $(COPY) -p
    COPY_DIR = $(COPY) -pR
    DEL_FILE = rm -f
    DEL_DIR = rmdir
    MOVE = mv
    ####### Output directory
    OBJECTS_DIR = ./
    ####### Files
    HEADERS =
    SOURCES = qtest.c
    OBJECTS = qtest.o
    FORMS =
    UICDECLS =
    UICIMPLS =
    SRCMOC =
    OBJMOC =
    DIST =
    QMAKE_TARGET = qt
    DESTDIR =
    TARGET = qt
    first: all
    ####### Implicit rules
    .SUFFIXES: .c .cpp .cc .cxx .C
    .cpp.o:
    $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
    .cc.o:
    $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
    .cxx.o:
    $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
    .C.o:
    $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
    .c.o:
    $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
    ####### Build rules
    all: Makefile $(TARGET)
    $(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC)
    $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)
    mocables: $(SRCMOC)
    $(MOC):
    ( cd $(QTDIR)/src/moc ; $(MAKE) )
    Makefile: qt.pro $(QTDIR)/mkspecs/linux-g++/qmake.conf
    $(QMAKE) qt.pro
    qmake:
    @$(QMAKE) qt.pro
    dist:
    @mkdir -p .tmp/qt && $(COPY_FILE) --parents $(SOURCES) $(HEADERS) $(FORMS) $(DIST) .tmp/qt/ && ( cd `dirname .tmp/qt` && $(TAR) qt.tar qt && $(GZIP) qt.tar ) && mv `dirname .tmp/qt`/qt.tar.gz . && rm -rf .tmp/qt
    mocclean:
    uiclean:
    clean:
    -rm -f $(OBJECTS)
    -rm -f *~ core *.core
    ####### Sub-libraries
    distclean: clean
    -rm -f $(TARGET) $(TARGET)
    FORCE:
    ####### Compile
    qtest.o: qtest.c
    ####### Install
    install: all
    uninstall:

    jv@suse8:~/qt>



    der Suchpfad zu den Headern ist aber irgendwie faul. Im Quellfile habe ich nur qapplication.h und qpushbutton (in spitzen Klammern) angegeben. Im Prinzip hat der Compiler den Pad ja mit file:/usr/lib/qt-3.0.3/include und die Files wie etwa qmap.h sind wohl in den anderen Headern wieder includiert und in der Installation definitiv vorhanden. Der Compiler gibt aus:

    jv@suse8:~/qt> make
    gcc -c -pipe -Wall -W -DQT_NO_DEBUG -I/usr/lib/qt-3.0.3/include -I/usr/lib/qt-3.0.3/mkspecs/linux-g++ -o qtest.o qtest.c
    In file included from /usr/lib/qt-3.0.3/include/qmime.h:43,
    from /usr/lib/qt-3.0.3/include/qevent.h:45,
    from /usr/lib/qt-3.0.3/include/qobject.h:45,
    from /usr/lib/qt-3.0.3/include/qwidget.h:43,
    from /usr/lib/qt-3.0.3/include/qdesktopwidget.h:42,
    from /usr/lib/qt-3.0.3/include/qapplication.h:42,
    from qtest.c:3:
    /usr/lib/qt-3.0.3/include/qmap.h:49: iterator: Datei oder Verzeichnis nicht gefunden
    /usr/lib/qt-3.0.3/include/qmap.h:50: map: Datei oder Verzeichnis nicht gefunden
    In file included from /usr/lib/qt-3.0.3/include/qtranslator.h:44,
    from /usr/lib/qt-3.0.3/include/qapplication.h:45,
    from qtest.c:3:
    /usr/lib/qt-3.0.3/include/qvaluelist.h:48: iterator: Datei oder Verzeichnis nicht gefunden
    /usr/lib/qt-3.0.3/include/qvaluelist.h:49: list: Datei oder Verzeichnis nicht gefunden
    In file included from /usr/lib/qt-3.0.3/include/qwindowdefs.h:43,
    from /usr/lib/qt-3.0.3/include/qwidget.h:42,
    from /usr/lib/qt-3.0.3/include/qdesktopwidget.h:42,
    from /usr/lib/qt-3.0.3/include/qapplication.h:42,
    from qtest.c:3:
    /usr/lib/qt-3.0.3/include/qobjectdefs.h:151: parse error before `QObject'
    /usr/lib/qt-3.0.3/include/qobjectdefs.h:151: warning: type defaults to `int' in declaration of `QObject'
    /usr/lib/qt-3.0.3/include/qobjectdefs.h:151: warning: data definition has no type or storage class
    /usr/lib/qt-3.0.3/include/qobjectdefs.h:152: parse error before `QMetaObject'
    /usr/lib/qt-3.0.3/include/qobjectdefs.h:152: warning: type defaults to `int' in declaration of `QMetaObject'
    /usr/lib/qt-3.0.3/include/qobjectdefs.h:152: warning: data definition has no type or storage class
    /usr/lib/qt-3.0.3/include/qobjectdefs.h:153: parse error before `QSignal'
    /usr/lib/qt-3.0.3/include/qobjectdefs.h:153: warning: type defaults to `int' in declaration of `QSignal'
    /usr/lib/qt-3.0.3/include/qobjectdefs.h:153: warning: data definition has no type or storage class

    ab hier enden meine Versuche im Chaos....

  7. #7
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Hmm.
    Benutz mal die Endung .cpp bei deiner Datei.

    Im Moment generiert er durch die Endung .c nämlich einen gcc Aufruf, aber du hast das C++ Code und kein C

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  8. #8
    Registrierter Benutzer
    Registriert seit
    21.06.2003
    Beiträge
    15
    habe die Dateiendung auf cpp umbenannt und Projekt und Makefile neu erzeugt. Die Fehler sind jetzt erheblich weniger aber irgendwo hakts noch immer gewaltig für so ein kurzes Progrämmchen.

    jv@suse8:~/qt> make
    g++ -o qt qtest.o -L/usr/X11R6/lib -lXext -lX11 -lm
    qtest.o: In function `main':
    qtest.o(.text+0x1a): undefined reference to `QApplication::QApplication(int &, char **)'
    qtest.o(.text+0x31): undefined reference to `QString::QString(char const *)'
    qtest.o(.text+0x4d): undefined reference to `QPushButton::QPushButton(QString const &, QWidget *, char const *)'
    qtest.o(.text+0x83): undefined reference to `QPushButton::resize(int, int)'
    qtest.o(.text+0x99): undefined reference to `QApplication::setMainWidget(QWidget *)'
    qtest.o(.text+0xab): undefined reference to `QWidget::show(void)'
    qtest.o(.text+0xba): undefined reference to `QApplication::exec(void)'
    qtest.o(.text+0xd0): undefined reference to `QPushButton::~QPushButton(void)'
    qtest.o(.text+0xe1): undefined reference to `QApplication::~QApplication(void)'
    qtest.o(.text+0x12d): undefined reference to `QPushButton::~QPushButton(void)'
    qtest.o(.text+0x140): undefined reference to `QApplication::~QApplication(void)'
    qtest.o: In function `QString::~QString(void)':
    qtest.o(.gnu.linkonce.t._._7QString+0x26): undefined reference to `QString::shared_null'
    qtest.o(.gnu.linkonce.t._._7QString+0x2e): undefined reference to `QString::shared_null'
    qtest.o(.gnu.linkonce.t._._7QString+0x3d): undefined reference to `QStringData::deleteSelf(void)'
    collect2: ld returned 1 exit status
    make: *** [qt] Fehler 1
    jv@suse8:~/qt>

    vielleicht doch noch ein Problem vom Suchpfad, den habe ich mit
    export QTDIR=/usr/lib/qt-3.0.3 aber eingestellt. Das Makefile ist jetzt

    ####### Compiler, tools and options
    CC = gcc
    CXX = g++
    LEX = flex
    YACC = yacc
    CFLAGS = -pipe -Wall -W $(RPM_OPT_FLAGS) -DQT_NO_DEBUG
    CXXFLAGS = -pipe -Wall -W $(RPM_OPT_FLAGS) -DQT_NO_DEBUG
    LEXFLAGS =
    YACCFLAGS= -d
    INCPATH = -I$(QTDIR)/include -I$(QTDIR)/mkspecs/linux-g++
    LINK = g++
    LFLAGS =
    LIBS = $(SUBLIBS) -L/usr/X11R6/lib -lXext -lX11 -lm
    AR = ar cqs
    RANLIB =
    MOC = $(QTDIR)/bin/moc
    UIC = $(QTDIR)/bin/uic
    QMAKE = qmake
    TAR = tar -cf
    GZIP = gzip -9f
    COPY = cp -f
    COPY_FILE= $(COPY) -p
    COPY_DIR = $(COPY) -pR
    DEL_FILE = rm -f
    DEL_DIR = rmdir
    MOVE = mv

    ####### Output directory
    OBJECTS_DIR = ./
    ####### Files
    HEADERS =
    SOURCES = qtest.cpp
    OBJECTS = qtest.o
    FORMS =
    UICDECLS =
    UICIMPLS =
    SRCMOC =
    OBJMOC =
    DIST =
    QMAKE_TARGET = qt
    DESTDIR =
    TARGET = qt
    first: all
    ####### Implicit rules
    .SUFFIXES: .c .cpp .cc .cxx .C
    .cpp.o:
    $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
    .cc.o:
    $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
    .cxx.o:
    $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
    .C.o:
    $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
    .c.o:
    $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
    ####### Build rules
    all: Makefile $(TARGET)
    $(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC)
    $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)
    mocables: $(SRCMOC)
    $(MOC):
    ( cd $(QTDIR)/src/moc ; $(MAKE) )
    Makefile: qt.pro $(QTDIR)/mkspecs/linux-g++/qmake.conf
    $(QMAKE) qt.pro
    qmake:
    @$(QMAKE) qt.pro
    dist:
    @mkdir -p .tmp/qt && $(COPY_FILE) --parents $(SOURCES) $(HEADERS) $(FORMS) $(DIST) .tmp/qt/ && ( cd `dirname .tmp/qt` && $(TAR) qt.tar qt && $(GZIP) qt.tar ) && mv `dirname .tmp/qt`/qt.tar.gz . && rm -rf .tmp/qt
    mocclean:
    uiclean:
    clean:
    -rm -f $(OBJECTS)
    -rm -f *~ core *.core
    ####### Sub-libraries
    distclean: clean
    -rm -f $(TARGET) $(TARGET)
    FORCE:
    ####### Compile
    qtest.o: qtest.cpp
    ####### Install
    install: all
    uninstall:

  9. #9
    Registrierter Benutzer Avatar von tuxipuxi
    Registriert seit
    30.08.2002
    Beiträge
    667
    hi,


    wie sieht denn das .pro file aus? es scheint, als ob nicht gegen die Qt lib gelinkt wird.
    schreib mal CONFIG += qt thread

    in das .pro file und lass das Makefile neu generieren...

    gruss,

    tuxipuxi.

  10. #10
    Registrierter Benutzer
    Registriert seit
    21.06.2003
    Beiträge
    15
    es kommen leider noch die gleichen Fehler. Das Projektfile ist jetzt:

    jv@suse8:~/qt> cat qt.pro
    ################################################## ####################
    # Automatically generated by qmake (1.02a) Thu Nov 6 13:35:56 2003
    ################################################## ####################

    TEMPLATE = app
    CONFIG -= moc
    CONFIG += qt thread

    # Input
    SOURCES += qtest.cpp
    jv@suse8:~/qt>

    das +=qt thread habe ich selbst reingeflickt
    Die Fehlermeldung kommt ja bei qtest.o und noch nicht bei qtest.cpp angemotzt. D.h. es ist kein Compilerproblem sondern ein Meldung des Linkers(?)
    Aber compiliert und gelinkt wird jetzt ja offensichtlich mit g++ als Compiler und Linker gleichzeitig mit einem einzigen Aufruf.Also müsste die Ursache vielleicht im Makefile liegen? Dieses Übersteigt aber meine Interpretationsversuche bei weitem - was immer ein moc sein soll und was $@ $> macht usw. etc. Das Resultat des Aufrufs sieht jetzt jedenfalls so aus:

    g++ -o qt qtest.o -L/usr/X11R6/lib -lpthread -lXext -lX11 -lm

    komischerweise wird der Parameter wie beim gcc Aufrum mit

    -I/usr/lib/qt-3.0.3/include -I/usr/lib/qt-3.0.3/mkspecs/linux-g++

    jetzt nicht mehr erzeugt, aber es ist ja auch ein anderer Compiler,
    was ja dann nicht unbedingt falscher sein muss.

  11. #11
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Original geschrieben von Janvi

    g++ -o qt qtest.o -L/usr/X11R6/lib -lpthread -lXext -lX11 -lm
    Hier fehlt immer noch das -lqt-mt

    Lösch mal das CONFIG -= moc bzw nimm das als .pro Datei
    Code:
    TEMPLATE = app
    CONFIG += qt thread
    SOURCES = qtest.cpp
    TARGET = qtest
    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  12. #12
    Registrierter Benutzer
    Registriert seit
    21.06.2003
    Beiträge
    15
    Volltreffer - es linkt jetzt prima und sogar das Programm macht das was ich von ihm erwartet habe. Vielleicht versteh ich ja auch irgendwann noch halbwegs was ich mache

Lesezeichen

Berechtigungen

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