From bd0f3345a938b35ce6a12f6150373b0955b8dd12 Mon Sep 17 00:00:00 2001 From: Timothy Pearson Date: Sun, 10 Jul 2011 15:24:15 -0500 Subject: Add Qt3 development HEAD version --- doc/html/tutorial1-05.html | 168 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 168 insertions(+) create mode 100644 doc/html/tutorial1-05.html (limited to 'doc/html/tutorial1-05.html') diff --git a/doc/html/tutorial1-05.html b/doc/html/tutorial1-05.html new file mode 100644 index 0000000..57e8572 --- /dev/null +++ b/doc/html/tutorial1-05.html @@ -0,0 +1,168 @@ + + + + + +Qt Tutorial - Chapter 5: Building Blocks + + + + + + + +
+ +Home + | +All Classes + | +Main Classes + | +Annotated + | +Grouped Classes + | +Functions +

Qt Tutorial - Chapter 5: Building Blocks

+ + +

Screenshot of tutorial five
+

This example shows how to create and connect together several widgets +by using signals and slots, and how to handle resize events. +

/****************************************************************
+**
+** Qt tutorial 5
+**
+****************************************************************/
+
+#include <qapplication.h>
+#include <qpushbutton.h>
+#include <qslider.h>
+#include <qlcdnumber.h>
+#include <qfont.h>
+
+#include <qvbox.h>
+
+class MyWidget : public QVBox
+{
+public:
+    MyWidget( QWidget *parent=0, const char *name=0 );
+};
+
+
+MyWidget::MyWidget( QWidget *parent, const char *name )
+        : QVBox( parent, name )
+{
+    QPushButton *quit = new QPushButton( "Quit", this, "quit" );
+    quit->setFont( QFont( "Times", 18, QFont::Bold ) );
+
+    connect( quit, SIGNAL(clicked()), qApp, SLOT(quit()) );
+
+    QLCDNumber *lcd  = new QLCDNumber( 2, this, "lcd" );
+
+    QSlider * slider = new QSlider( Horizontal, this, "slider" );
+    slider->setRange( 0, 99 );
+    slider->setValue( 0 );
+
+    connect( slider, SIGNAL(valueChanged(int)), lcd, SLOT(display(int)) );
+}
+
+int main( int argc, char **argv )
+{
+    QApplication a( argc, argv );
+
+    MyWidget w;
+    a.setMainWidget( &w );
+    w.show();
+    return a.exec();
+}
+
+ + + +

Line-by-line Walkthrough +

+

    #include <qapplication.h>
+    #include <qpushbutton.h>
+    #include <qslider.h>
+    #include <qlcdnumber.h>
+    #include <qfont.h>
+
+    #include <qvbox.h>
+
+

Three new include files are shown here. qslider.h and qlcdnumber.h are there +because we use two new widgets, QSlider and QLCDNumber. qvbox.h is +here because we use Qt's automatic layout support. +

    class MyWidget : public QVBox
+    {
+    public:
+        MyWidget( QWidget *parent=0, const char *name=0 );
+    };
+
+

+

    MyWidget::MyWidget( QWidget *parent, const char *name )
+            : QVBox( parent, name )
+    {
+
+

MyWidget is now derived from QVBox instead of QWidget. That way we use +the layout of the QVBox (which places all of its children vertically +inside itself). Resizes are now handled automatically by the QVBox and +therefore by MyWidget, too. +

        QLCDNumber *lcd  = new QLCDNumber( 2, this, "lcd" );
+
+

lcd is a QLCDNumber, a widget that displays numbers in an LCD-like +fashion. This instance is set up to display two digits and to be a child of +this. It is named "lcd". +

        QSlider * slider = new QSlider( Horizontal, this, "slider" );
+        slider->setRange( 0, 99 );
+        slider->setValue( 0 );
+
+

QSlider is a classical slider; the user can use the widget to drag +something to adjust an integer value in a range. Here we create a +horizontal one, set its range to 0-99 (inclusive, see the QSlider::setRange() documentation) and its initial value to 0. +

        connect( slider, SIGNAL(valueChanged(int)), lcd, SLOT(display(int)) );
+
+

Here we use the signal/slot mechanism +to connect the slider's valueChanged() signal to the LCD number's +display() slot. +

Whenever the slider's value changes it broadcasts the new value by +emitting the valueChanged() signal. Because that signal is connected to +the LCD number's display() slot, the slot is called when the signal is +broadcast. Neither of the objects knows about the other. This is +essential in component programming. +

Slots are otherwise normal C++ member functions and follow the normal +C++ access rules. +

Behavior +

+

The LCD number reflects everything you do to the slider, and the +widget handles resizing well. Notice that the LCD number widget +changes in size when the window is resized (because it can), but the +others stay about the same (because otherwise they would look stupid). +

(See Compiling for how to create a +makefile and build the application.) +

Exercises +

+

Try changing the LCD number to add more digits or to change mode. You can even add four push +buttons to set the number base. +

You can also change the slider's range. +

Perhaps it would have been better to use QSpinBox than a slider? +

Try to make the application quit when the LCD number overflows. +

You're now ready for Chapter 6. +

[Previous tutorial] +[Next tutorial] +[Main tutorial page] +

+ +


+ +
Copyright © 2007 +TrolltechTrademarks +
Qt 3.3.8
+
+ -- cgit v1.2.1