Viadeo Twitter Google Bookmarks ! Facebook Digg del.icio.us MySpace Yahoo MyWeb Blinklist Netvouz Reddit Simpy StumbleUpon Bookmarks Windows Live Favorites 
Logo Documentation Qt ·  Page d'accueil  ·  Toutes les classes  ·  Toutes les fonctions  ·  Vues d'ensemble  · 

QFormLayout Class Reference
[QtGui module]

The QFormLayout class manages forms of input widgets and their associated labels. More...

 #include <QFormLayout>

Inherits QLayout.

This class was introduced in Qt 4.4.

Public Types

  • enum FieldGrowthPolicy { FieldsStayAtSizeHint, ExpandingFieldsGrow, AllNonFixedFieldsGrow }
  • enum ItemRole { LabelRole, FieldRole }
  • enum RowWrapPolicy { DontWrapRows, WrapLongRows, WrapAllRows }

Properties

  • 2 properties inherited from QLayout
  • 1 property inherited from QObject

Public Functions

  • 28 public functions inherited from QLayout
  • 29 public functions inherited from QObject
  • 17 public functions inherited from QLayoutItem

Additional Inherited Members

  • 1 public slot inherited from QObject
  • 1 signal inherited from QObject
  • 1 static public member inherited from QLayout
  • 5 static public members inherited from QObject
  • 3 protected functions inherited from QLayout
  • 7 protected functions inherited from QObject

Detailed Description

The QFormLayout class manages forms of input widgets and their associated labels.

QFormLayout is a convenience layout class that lays out its children in a two-column form. The left column consists of labels and the right column consists of "field" widgets (line editors, spin boxes, etc.).

Traditionally, such two-column form layouts were achieved using QGridLayout. QFormLayout is a higher-level alternative that provides the following advantages:

  • Adherence to the different platform's look and feel guidelines.

    For example, the Mac OS X Aqua and KDE guidelines specify that the labels should be right-aligned, whereas Windows and GNOME applications normally use left-alignment.

  • Support for wrapping long rows.

    For devices with small displays, QFormLayout can be set to wrap long rows, or even to wrap all rows.

  • Convenient API for creating label--field pairs.

    The addRow() overload that takes a QString and a QWidget * creates a QLabel behind the scenes and automatically set up its buddy. We can then write code like this:

     QFormLayout *formLayout = new QFormLayout;
     formLayout->addRow(tr("&Name:"), nameLineEdit);
     formLayout->addRow(tr("&Email:"), emailLineEdit);
     formLayout->addRow(tr("&Age:"), ageSpinBox);
     setLayout(formLayout);

    Compare this with the following code, written using QGridLayout:

     nameLabel = new QLabel(tr("&Name:"));
     nameLabel->setBuddy(nameLineEdit);
    
     emailLabel = new QLabel(tr("&Name:"));
     emailLabel->setBuddy(emailLineEdit);
    
     ageLabel = new QLabel(tr("&Name:"));
     ageLabel->setBuddy(ageSpinBox);
    
     QGridLayout *gridLayout = new QGridLayout;
     gridLayout->addWidget(nameLabel, 0, 0);
     gridLayout->addWidget(nameLineEdit, 0, 1);
     gridLayout->addWidget(emailLabel, 1, 0);
     gridLayout->addWidget(emailLineEdit, 1, 1);
     gridLayout->addWidget(ageLabel, 2, 0);
     gridLayout->addWidget(ageSpinBox, 2, 1);
     setLayout(gridLayout);

The table below shows the default appearance in different styles.

QCommonStyle derived styles (except QPlastiqueStyle)QMacStyleQPlastiqueStyleQt Extended styles
Traditional style used for Windows, GNOME, and earlier versions of KDE. Labels are left aligned, and expanding fields grow to fill the available space. (This normally corresponds to what we would get using a two-column QGridLayout.)Style based on the Mac OS X Aqua guidelines. Labels are right-aligned, the fields don't grow beyond their size hint, and the form is horizontally centered.Recommended style for KDE applications. Similar to MacStyle, except that the form is left-aligned and all fields grow to fill the available space.Default style for Qt Extended styles. Labels are right-aligned, expanding fields grow to fill the available space, and row wrapping is enabled for long lines.

The form styles can be also be overridden individually by calling setLabelAlignment(), setFormAlignment(), setFieldGrowthPolicy(), and setRowWrapPolicy(). For example, to simulate the form layout appearance of QMacStyle on all platforms, but with left-aligned labels, you could write:

 formLayout->setRowWrapPolicy(QFormLayout::DontWrapRows);
 formLayout->setFieldGrowthPolicy(QFormLayout::FieldsStayAtSizeHint);
 formLayout->setFormAlignment(Qt::AlignHCenter | Qt::AlignTop);
 formLayout->setLabelAlignment(Qt::AlignLeft);

See also QGridLayout, QBoxLayout, and QStackedLayout.


Member Type Documentation

enum QFormLayout::FieldGrowthPolicy

This enum specifies the different policies that can be used to control the way in which the form's fields grow.

ConstantValueDescription
QFormLayout::FieldsStayAtSizeHint0The fields never grow beyond their effective size hint. This is the default for QMacStyle.
QFormLayout::ExpandingFieldsGrow1Fields with an horizontal size policy of Expanding or MinimumExpanding will grow to fill the available space. The other fields will not grow beyond their effective size hint. This is the default policy for Plastique.
QFormLayout::AllNonFixedFieldsGrow2All fields with a size policy that allows them to grow will grow to fill the available space. This is the default policy for most styles.

See also fieldGrowthPolicy.

enum QFormLayout::ItemRole

This enum specifies the types of widgets (or other layout items) that may appear in a row.

ConstantValueDescription
QFormLayout::LabelRole0A label widget.
QFormLayout::FieldRole1A field widget.

See also itemAt() and getItemPosition().

enum QFormLayout::RowWrapPolicy

This enum specifies the different policies that can be used to control the way in which the form's rows wrap.

ConstantValueDescription
QFormLayout::DontWrapRows0Fields are always laid out next to their label. This is the default policy for all styles except Qt Extended styles.
QFormLayout::WrapLongRows1Labels are given enough horizontal space to fit the widest label, and the rest of the space is given to the fields. If the minimum size of a field pair is wider than the available space, the field is wrapped to the next line. This is the default policy for Qt Extended styles.
QFormLayout::WrapAllRows2Fields are always laid out below their label.

See also rowWrapPolicy.


Property Documentation

fieldGrowthPolicy : FieldGrowthPolicy

This property holds the way in which the form's fields grow.

The default value depends on the widget or application style. For QMacStyle, the default is FieldsStayAtSizeHint; for QCommonStyle derived styles (like Plastique and Windows), the default is ExpandingFieldsGrow; for Qt Extended styles, the default is AllNonFixedFieldsGrow.

If none of the fields can grow and the form is resized, extra space is distributed according to the current form alignment.

Access functions:

  • FieldGrowthPolicy fieldGrowthPolicy () const
  • void setFieldGrowthPolicy ( FieldGrowthPolicy policy )

See also formAlignment and rowWrapPolicy.

formAlignment : Qt::Alignment

This property holds the alignment of the form layout's contents within the layout's geometry.

The default value depends on the widget or application style. For QMacStyle, the default is Qt::AlignHCenter | Qt::AlignTop; for the other styles, the default is Qt::AlignLeft | Qt::AlignTop.

Access functions:

  • Qt::Alignment formAlignment () const
  • void setFormAlignment ( Qt::Alignment alignment )

See also labelAlignment and rowWrapPolicy.

horizontalSpacing : int

This property holds the spacing between widgets that are laid out side by side.

By default, if no value is explicitly set, the layout's horizontal spacing is inherited from the parent layout, or from the style settings for the parent widget.

Access functions:

  • int horizontalSpacing () const
  • void setHorizontalSpacing ( int spacing )

See also verticalSpacing, QStyle::pixelMetric(), and PM_LayoutHorizontalSpacing.

labelAlignment : Qt::Alignment

This property holds the horizontal alignment of the labels.

The default value depends on the widget or application style. For QCommonStyle derived styles, except for QPlastiqueStyle, the default is Qt::AlignLeft; for the other styles, the default is Qt::AlignRight.

Access functions:

  • Qt::Alignment labelAlignment () const
  • void setLabelAlignment ( Qt::Alignment alignment )

See also formAlignment.

rowWrapPolicy : RowWrapPolicy

This property holds the way in which the form's rows wrap.

The default value depends on the widget or application style. For Qt Extended styles, the default is WrapLongRows; for the other styles, the default is DontWrapRows.

If you want to display each label above its associated field (instead of next to it), set this property to WrapAllRows.

Access functions:

  • RowWrapPolicy rowWrapPolicy () const
  • void setRowWrapPolicy ( RowWrapPolicy policy )

See also fieldGrowthPolicy.

verticalSpacing : int

This property holds the spacing between widgets that are laid out vertically.

By default, if no value is explicitly set, the layout's vertical spacing is inherited from the parent layout, or from the style settings for the parent widget.

Access functions:

  • int verticalSpacing () const
  • void setVerticalSpacing ( int spacing )

See also horizontalSpacing, QStyle::pixelMetric(), and PM_LayoutHorizontalSpacing.


Member Function Documentation

QFormLayout::QFormLayout ( QWidget * parent = 0 )

Constructs a new form layout with the given parent widget.

See also QWidget::setLayout().

QFormLayout::~QFormLayout ()

Destroys the form layout.

void QFormLayout::addRow ( QWidget * label, QWidget * field )

Adds a new row to the bottom of this form layout, with the given label and field.

See also insertRow().

void QFormLayout::addRow ( QWidget * label, QLayout * field )

This is an overloaded member function, provided for convenience.

void QFormLayout::addRow ( const QString & labelText, QWidget * field )

This is an overloaded member function, provided for convenience.

This overload automatically creates a QLabel behind the scenes with labelText as its text. The field is set as the new QLabel's buddy.

void QFormLayout::addRow ( const QString & labelText, QLayout * field )

This is an overloaded member function, provided for convenience.

This overload automatically creates a QLabel behind the scenes with labelText as its text.

void QFormLayout::addRow ( QWidget * widget )

This is an overloaded member function, provided for convenience.

Adds the specified widget at the end of this form layout. The widget spans both columns.

void QFormLayout::addRow ( QLayout * layout )

This is an overloaded member function, provided for convenience.

Adds the specified layout at the end of this form layout. The layout spans both columns.

void QFormLayout::getItemPosition ( int index, int * rowPtr, ItemRole * rolePtr ) const

Retrieves the row and role (column) of the item at the specified index. If index is out of bounds, *rowPtr is set to -1; otherwise the row is stored in *rowPtr and the role is stored in *rolePtr.

See also itemAt(), count(), getLayoutPosition(), and getWidgetPosition().

void QFormLayout::getLayoutPosition ( QLayout * layout, int * rowPtr, ItemRole * rolePtr ) const

Retrieves the row and role (column) of the specified child layout. If layout is not in the form layout, *rowPtr is set to -1; otherwise the row is stored in *rowPtr and the role is stored in *rolePtr.

void QFormLayout::getWidgetPosition ( QWidget * widget, int * rowPtr, ItemRole * rolePtr ) const

Retrieves the row and role (column) of the specified widget in the layout. If widget is not in the layout, *rowPtr is set to -1; otherwise the row is stored in *rowPtr and the role is stored in *rolePtr.

See also getItemPosition() and itemAt().

void QFormLayout::insertRow ( int row, QWidget * label, QWidget * field )

Inserts a new row at position row in this form layout, with the given label and field. If row is out of bounds, the new row is added at the end.

See also addRow().

void QFormLayout::insertRow ( int row, QWidget * label, QLayout * field )

This is an overloaded member function, provided for convenience.

void QFormLayout::insertRow ( int row, const QString & labelText, QWidget * field )

This is an overloaded member function, provided for convenience.

This overload automatically creates a QLabel behind the scenes with labelText as its text. The field is set as the new QLabel's buddy.

void QFormLayout::insertRow ( int row, const QString & labelText, QLayout * field )

This is an overloaded member function, provided for convenience.

This overload automatically creates a QLabel behind the scenes with labelText as its text.

void QFormLayout::insertRow ( int row, QWidget * widget )

This is an overloaded member function, provided for convenience.

Inserts the specified widget at position row in this form layout. The widget spans both columns. If row is out of bounds, the widget is added at the end.

void QFormLayout::insertRow ( int row, QLayout * layout )

This is an overloaded member function, provided for convenience.

Inserts the specified layout at position row in this form layout. The layout spans both columns. If row is out of bounds, the widget is added at the end.

QLayoutItem * QFormLayout::itemAt ( int row, ItemRole role ) const

Returns the layout item in the given row with the specified role (column). Returns 0 if there is no such item.

See also QLayout::itemAt() and setItem().

QWidget * QFormLayout::labelForField ( QWidget * field ) const

Returns the label associated with the given field.

See also itemAt().

QWidget * QFormLayout::labelForField ( QLayout * field ) const

This is an overloaded member function, provided for convenience.

int QFormLayout::rowCount () const

Returns the number of rows in the form.

See also QLayout::count().

void QFormLayout::setItem ( int row, ItemRole role, QLayoutItem * item )

Sets the item in the given row for the given role to item, extending the layout with empty rows if necessary.

If the cell is already occupied, the item is not inserted and an error message is sent to the console.

Warning: Do not use this function to add child layouts or child widget items. Use setLayout() or setWidget() instead.

See also setLayout().

void QFormLayout::setLayout ( int row, ItemRole role, QLayout * layout )

Sets the sub-layout in the given row for the given role to layout, extending the form layout with empty rows if necessary.

If the cell is already occupied, the layout is not inserted and an error message is sent to the console.

Note: For most applications, addRow() or insertRow() should be used instead of setLayout().

See also setWidget().

void QFormLayout::setSpacing ( int spacing )

This function sets both the vertical and horizontal spacing to spacing.

See also spacing(), setVerticalSpacing(), and setHorizontalSpacing().

void QFormLayout::setWidget ( int row, ItemRole role, QWidget * widget )

Sets the widget in the given row for the given role to widget, extending the layout with empty rows if necessary.

If the cell is already occupied, the widget is not inserted and an error message is sent to the console.

Note: For most applications, addRow() or insertRow() should be used instead of setWidget().

See also setLayout().

int QFormLayout::spacing () const

If the vertical spacing is equal to the horizontal spacing, this function returns that value; otherwise it returns -1.

See also setSpacing(), verticalSpacing(), and horizontalSpacing().

Publicité

Best Of

Actualités les plus lues

Semaine
Mois
Année
  1. « Quelque chose ne va vraiment pas avec les développeurs "modernes" », un développeur à "l'ancienne" critique la multiplication des bibliothèques 64
  2. Apercevoir la troisième dimension ou l'utilisation multithreadée d'OpenGL dans Qt, un article des Qt Quarterly traduit par Guillaume Belz 0
  3. Les développeurs ignorent-ils trop les failles découvertes dans leur code ? Prenez-vous en compte les remarques des autres ? 17
  4. BlackBerry 10 : premières images du prochain OS de RIM qui devrait intégrer des widgets et des tuiles inspirées de Windows Phone 0
  5. Quelles nouveautés de C++11 Visual C++ doit-il rapidement intégrer ? Donnez-nous votre avis 10
  6. Adieu qmake, bienvenue qbs : Qt Building Suite, un outil déclaratif et extensible pour la compilation de projets Qt 17
  7. La rubrique Qt a besoin de vous ! 1
Page suivante

Le Qt Developer Network au hasard

Logo

La création de colonnes dans une ListView en QML

Le Qt Developer Network est un réseau de développeurs Qt anglophone, où ils peuvent partager leur expérience sur le framework. Lire l'article.

Communauté

Ressources

Liens utiles

Contact

  • Vous souhaitez rejoindre la rédaction ou proposer un tutoriel, une traduction, une question... ? Postez dans le forum Contribuez ou contactez-nous par MP ou par email (voir en bas de page).

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 qtextended4.4
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 !
 
 
 
 
Partenaires

Hébergement Web