Home | All Classes | Main Classes | Annotated | Grouped Classes | Functions |

[Previous: Chapter 1] [Qt Tutorial] [Next: Chapter 3]

# Qt Tutorial 2 - Calling it Quits

Files:

- tutorial/t2/main.cpp

Having created a window in Chapter 1, we will now go on to make the application quit properly when the user tells it to.

We will also use a font that is more exciting than the default one.

        /****************************************************************
        **
        ** Qt tutorial 2
        **
        ****************************************************************/

        #include <QApplication>
        #include <QFont>
        #include <QPushButton>

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

            QPushButton quit("Quit");
            quit.resize(75, 30);
            quit.setFont(QFont("Times", 18, QFont::Bold));

            QObject::connect(&quit, SIGNAL(clicked()), &app, SLOT(quit()));

            app.setMainWidget(&quit);
            quit.show();
            return app.exec();
        }

## Line by Line Walkthrough

        #include <QFont>

Since this program uses QFont, it needs to include `<QFont>`.

            QPushButton quit("Quit");

This time, the button says Quit and that's exactly what the program will do when the user clicks the button.

            quit.resize(75, 30);

We've chosen another size for the button since the text is a bit shorter than "Hello world!". We could also have used QFontMetrics to set right size, or let QPushButton choose a reasonable default.

            quit.setFont(QFont("Times", 18, QFont::Bold));

Here we choose a new font for the button, an 18-point bold font from the Times family. It is also possible to change the default font for the entire application, using QApplication::setFont().

            QObject::connect(&quit, SIGNAL(clicked()), &app, SLOT(quit()));

QObject::connect() is perhaps the most central feature of Qt. Note that connect() is a static function in QObject. Do not confuse it with the `connect()` function in the Berkeley socket library.

This connect() call establishes a one-way connection between two Qt objects (objects that inherit QObject, directly or indirectly). Every Qt object can have both `signals` (to send messages) and `slots` (to receive messages). All widgets are Qt objects, since they inherit QWidget, which in turn inherits QObject.

Here, the clicked() signal of `quit` is connected to the quit() slot of `app`, so that when the button is clicked, the application quits.

The Signals and Slots documentation describes this topic in detail.

## Running the Application

When you run this program, you will see an even smaller window than in Chapter 1, filled with an even smaller button.

See Chapter 1 for how to create a makefile and build the application.

## Exercises

Try to resize the window. Press the button. Oops! That connect() would seem to make some difference.

Are there any other signals in QPushButton you can connect to quit? [Hint: The QPushButton inherits most of its functionality from QAbstractButton.]

[Previous: Chapter 1] [Qt Tutorial] [Next: Chapter 3]