Buchquellcode läuft nicht

Verschiedenes zu Qt
Antworten
Terep
Beiträge: 6
Registriert: 8. Februar 2009 16:11
Wohnort: Region Hannover

Buchquellcode läuft nicht

Beitrag von Terep »

Hallo Leute

ALs Einsteiger habe ich mir Literatur besorgt, um QT zu lernen.
Ärgerlich ist es dann, wenn Originalquellcode aus dem Buch nicht läuft.

Einige Beispielcodes konnte ich erfolgreich unter Linux,KDE,Emacs zum Laufen
bringen. Also sollte es nicht an meiner Umgebung liegen.

Ist der Quellcode schon veraltet? Leider baut das Buch in der Fortsetzung auf diesen Quellcode auf. Kann man diesen aktualisieren?

Code: Alles auswählen

#include <qapplication.h>
#include <qpushbutton.h>
#include <qslider.h>
#include <qlcdnumber.h>

int main( int argc, char* argv[] )
{
   QApplication myapp( argc, argv );

   QWidget* mywidget = new QWidget();
   mywidget->setGeometry( 400, 300, 200, 150 );
  
   //.... Erzeugen eines Schiebebalkens
   QSlider* myslider = new QSlider(  0,  // kleinstm�gl. Wert
                                    99,  // gr��tm�gl. Wert
                                     1,  // Schrittweite
                                    20,  // Startwert
                                    QSlider::Horizontal,  // Ausrichtung
                                    mywidget );           // Elternwidget
   myslider->setGeometry( 10, 10, 180, 30 );

   //.... Erzeugen eines Objekts zur Anzeige von LCD-Nummern
   QLCDNumber* mylcdnum = new QLCDNumber( 2,          // Ziffernzahl
                                          mywidget ); // Elternwidget
   mylcdnum->setGeometry( 60, 50, 80, 50 );
   mylcdnum->display( 20 ); // zeige Startwert an

   // Verbinde Schiebebalken und Nummernanzeige
   QObject::connect( myslider, SIGNAL( valueChanged( int ) ), 
                     mylcdnum, SLOT( display( int ) ) );

   // Zwei Buttons zum schrittweisen Erh�hen und 
   // Erniedrigen der Schiebebalken-Werte
   QPushButton* decrement = new QPushButton( "<", mywidget );
    decrement->setGeometry( 10, 110, 50, 30 );
    decrement->setFont(QFont("Times", 18, QFont::Bold) );
    decrement->setPaletteBackgroundColor( Qt::red );

   QPushButton* increment = new QPushButton( ">", mywidget );
    increment->setGeometry( 140, 110, 50, 30 );
    increment->setFont(QFont("Times", 18, QFont::Bold) );
    increment->setPaletteBackgroundColor( Qt::green );
  
   // Verbinde das clicked()-Signal der Buttons mit den Slots, die 
   // den Schiebebalken-Wert erh�hen bzw. erniedrigen
   QObject::connect( decrement, SIGNAL( clicked() ),
                     myslider, SLOT( subtractStep() ) );
   QObject::connect( increment, SIGNAL( clicked() ),
                     myslider, SLOT( addStep() ) );
  
   myapp.setMainWidget( mywidget );
   mywidget->show();
   return myapp.exec();
}
Folgende Fehlermeldungen:


schiebbalken.cpp: In function ‘int main(int, char**)’:
schiebbalken.cpp:18: error: ‘Horizontal’ is not a member of ‘QSlider’
schiebbalken.cpp:37: error: ‘class QPushButton’ has no member named ‘setPaletteBackgroundColor’
schiebbalken.cpp:42: error: ‘class QPushButton’ has no member named ‘setPaletteBackgroundColor’
schiebbalken.cpp:51: error: ‘class QApplication’ has no member named ‘setMainWidget’
make: *** [schiebbalken.o] Fehler 1

Wie gesagt, ich möchte mittels diesem Quellcode den Einsteig erreichen. Die QT-Doku ist für mich noch nicht überschaubar.

Über Hilfe würde ich mich freuen!

Terep
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Nein, Qt3 und Qt4 ist nicht in allen Punkten kompatibel. Und das du mit 2 verschiedenen Qt-Versionen arbeitest, weist du zwar wolltest du uns aber nicht verraten, oder...
Terep
Beiträge: 6
Registriert: 8. Februar 2009 16:11
Wohnort: Region Hannover

Wenn ich weiß was ich weiß

Beitrag von Terep »

Warum soll ich dann posten?

C++ ist stolz darauf seit ...zig Jahren abwärtskompatibel zu sein. Das Buch, aus dem der Quellcode ist, stammt aus dem Jahr 2005. Aus C++ Sicht nicht alt. Das C++ Buch von Bjarne Stroustrup ist viel älter und doch noch aktuell.

Wo steht es geschrieben, dass QT nicht abwärtskompatibel ist. Ich habe so etwas schon befürchtet (!) und daher die Vermutung der Überalterung geäußert.

Was mich irritiert, ist das sehr kurze Kommentieren beider (!) Postings. Besser fände ich es, wenn Du konkret geantwortest hättest, anstatt solch eine merkwürdige Unterstellung zu äußern. Wenn Dich Anfängerfragen nerven, ignoriere doch solche Postings.

Das, was Du damit erreichst, ist doch das Festigen von Vorurteilen, dass newbies nur nerven.

Stell Dir vor, Du hättest in 10 Sätzen erläutert, wie man den Quellcode aktualisiert und fast schon traumhaft wäre es gewesen, darauf hinzuweisen, dass aller Anfang schwer ist.

Und wenn Dir 10 Sätze zuviel sind, denke ich, dass sich dann andere finden würden.

Da, wo ich Bescheid weiß, helfe ich auch gerne und ich denke solche Leute gibt es überall. Wenn es hier solche Leute gibt, werden sie nach Deinem Statement nicht mehr reagieren. Denn es wäre ihnen sicherlich peinlich.

QT macht auf mich einen interessanten Eindruck. Es gibt nicht viele Foren, in denen es thematisiert wird. Das ist der Grund, warum ich jetzt mit deutlichen Worten schreibe.

Terep
-=Freaky=-
Beiträge: 503
Registriert: 29. Dezember 2006 22:54
Wohnort: HL

Beitrag von -=Freaky=- »

http://doc.trolltech.com/4.0/porting4.html
kommst du damit weiter?

ansonsten muesstest du den code eben per hand mit Qt4 neuschreiben.
wie genau, kann ich dir nicht sagen, da sollten aber google, forensuche und der assistant bzw. http://doc.trolltech.com/4.4/index.html helfen ...

mfg,
julian
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Die Auf- und Abwärtskompatibilität von C++ hat nichts damit zu tun, ob eine Bibliothek, die auf C++ aufbaut ebenfalls Auf- oder Abwärtskompatibel ist. Im Falle von Qt4 steht es wie immer in der Doku:Porting to Qt 4

Außerdem 2 Postings für das selbe Thema. Warum?

Ansonsten:
Den Konstruktor von QSlider gibt es so nicht mehr.
QApplication::setMainWidget() gibt es nicht mehr
QPushButton::setPaletteBackgroundColor() kann mit setPalette oder QStyle oder StyleSheets nachgebildet werden
setGeometry sollte auch nicht mehr verwendet werden, dafür gibt es Layouts

Debian hat unter anderem noch qmake-qt3 um doch noch auf Qt3-Basis arbeiten, sinnvoll ist dies aber auf Dauer nicht
Antworten