Qt Tutorial 6 - Building Blocks Galore!Files: This example shows how to encapsulate two widgets into a new component and how easy it is to use many widgets. For the first time, we use a custom widget as a child widget. #include <QApplication> #include <QFont> #include <QGridLayout> #include <QLCDNumber> #include <QPushButton> #include <QSlider> #include <QVBoxLayout> #include <QWidget> class LCDRange : public QWidget { public: LCDRange(QWidget *parent = 0); }; LCDRange::LCDRange(QWidget *parent) : QWidget(parent) { QLCDNumber *lcd = new QLCDNumber(2); lcd->setSegmentStyle(QLCDNumber::Filled); QSlider *slider = new QSlider(Qt::Horizontal); slider->setRange(0, 99); slider->setValue(0); connect(slider, SIGNAL(valueChanged(int)), lcd, SLOT(display(int))); QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(lcd); layout->addWidget(slider); setLayout(layout); } class MyWidget : public QWidget { public: MyWidget(QWidget *parent = 0); }; MyWidget::MyWidget(QWidget *parent) : QWidget(parent) { QPushButton *quit = new QPushButton(tr("Quit")); quit->setFont(QFont("Times", 18, QFont::Bold)); connect(quit, SIGNAL(clicked()), qApp, SLOT(quit())); QGridLayout *grid = new QGridLayout; for (int row = 0; row < 3; ++row) { for (int column = 0; column < 3; ++column) { LCDRange *lcdRange = new LCDRange; grid->addWidget(lcdRange, row, column); } } QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(quit); layout->addLayout(grid); setLayout(layout); } int main(int argc, char *argv[]) { QApplication app(argc, argv); MyWidget widget; widget.show(); return app.exec(); } Line by Line Walkthroughclass LCDRange : public QWidget { public: LCDRange(QWidget *parent = 0); }; The LCDRange widget is a widget without any API. It just has a constructor. This sort of widget is not very useful, so we'll add some API later. LCDRange::LCDRange(QWidget *parent) : QWidget(parent) { QLCDNumber *lcd = new QLCDNumber(2); lcd->setSegmentStyle(QLCDNumber::Filled); QSlider *slider = new QSlider(Qt::Horizontal); slider->setRange(0, 99); slider->setValue(0); connect(slider, SIGNAL(valueChanged(int)), lcd, SLOT(display(int))); QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(lcd); layout->addWidget(slider); setLayout(layout); } This is lifted straight from the MyWidget constructor in Chapter 5. The only differences are that the Quit button is left out and the class is renamed. class MyWidget : public QWidget { public: MyWidget(QWidget *parent = 0); }; MyWidget, too, contains no API except a constructor. MyWidget::MyWidget(QWidget *parent) : QWidget(parent) { QPushButton *quit = new QPushButton(tr("Quit")); quit->setFont(QFont("Times", 18, QFont::Bold)); connect(quit, SIGNAL(clicked()), qApp, SLOT(quit())); The push button that used to be in what is now LCDRange has been separated so that we can have one Quit button and many LCDRange objects. QGridLayout *grid = new QGridLayout; We create a QWidget with a QGridLayout that will contain three columns. The QGridLayout automatically arranges its widgets in rows and columns; you can specify the row and column numbers when adding widgets to the layout, and QGridLayout will fit them into the grid. for (int row = 0; row < 3; ++row) { for (int column = 0; column < 3; ++column) { LCDRange *lcdRange = new LCDRange; grid->addWidget(lcdRange, row, column); } } We create nine LCDRange widgets, all of which are children of the grid object, and we arrange them in three rows and three columns. QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(quit); layout->addLayout(grid); setLayout(layout); } Finally, we add the Quit button and the grid layout containing LCDRange widgets, to the main layout. The QWidget::addLayout() function is similar to the QWidget::addWidget() function, making the given layout a child og the main layout. That's all. Running the ApplicationThis program shows how easy it is to use many widgets at a time. Each one behaves like the slider and LCD number in the previous chapter. Again, the difference lies in the implementation. ExercisesInitialize each slider with a different/random value on startup. [Previous: Chapter 5] [Qt Tutorial] [Next: Chapter 7] |
Publicité
Best OfActualités les plus luesSemaine
Mois
Année
Le blog Digia au hasardDéploiement d'applications Qt Commercial sur les tablettes Windows 8Le blog Digia est l'endroit privilégié pour la communication sur l'édition commerciale de Qt, où des réponses publiques sont apportées aux questions les plus posées au support. Lire l'article.
CommunautéRessources
Liens utilesContact
Qt dans le magazine |
Cette page est une traduction d'une page de la documentation de Qt, écrite par Nokia Corporation and/or its subsidiary(-ies). Les éventuels problèmes résultant d'une mauvaise traduction ne sont pas imputables à Nokia. | Qt 4.3 | |
Copyright © 2012 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon, vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD. | ||
Vous avez déniché une erreur ? Un bug ? Une redirection cassée ? Ou tout autre problème, quel qu'il soit ? Ou bien vous désirez participer à ce projet de traduction ? N'hésitez pas à nous contacter ou par MP ! |
Copyright © 2000-2012 - www.developpez.com