User Login Dialog: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
(Add "cleanup" tag)
(Decode HTML entity names)
Line 74: Line 74:
''' to display
''' to display
  */
  */
  void setUsername( QString& username );
  void setUsername( QString& username );


  /*!
  /*!
Line 80: Line 80:
  * password the password to fill into the dialog form
  * password the password to fill into the dialog form
  */
  */
  void setPassword( QString& password );
  void setPassword( QString& password );


  /*!
  /*!
Line 87: Line 87:
  '''usernames a list of usernames
  '''usernames a list of usernames
*/
*/
  void setUsernamesList( const QStringList& usernames );
  void setUsernamesList( const QStringList& usernames );


signals:
signals:
Line 97: Line 97:
  * index the number of the username selected in the combobox
  * index the number of the username selected in the combobox
  */
  */
  void acceptLogin( QString& username, QString& password, int& indexNumber );
  void acceptLogin( QString& username, QString& password, int& indexNumber );


public slots:
public slots:
Line 169: Line 169:
}
}


void LoginDialog::setUsername(QString &username){
void LoginDialog::setUsername(QString &username){
  bool found = false;
  bool found = false;
  for( int i = 0; i < comboUsername->count() &amp;&amp; ! found ; i++ )
  for( int i = 0; i < comboUsername->count() && ! found ; i++ )
  if( comboUsername->itemText( i ) == username ){
  if( comboUsername->itemText( i ) == username ){
  comboUsername->setCurrentIndex( i );
  comboUsername->setCurrentIndex( i );
Line 189: Line 189:
}
}


void LoginDialog::setPassword(QString &amp;password){
void LoginDialog::setPassword(QString &password){
  editPassword->setText( password );
  editPassword->setText( password );
}
}
Line 207: Line 207:
}
}


void LoginDialog::setUsernamesList(const QStringList &amp;usernames){
void LoginDialog::setUsernamesList(const QStringList &usernames){
  comboUsername->addItems( usernames );
  comboUsername->addItems( usernames );
}
}
Line 218: Line 218:
loginDialog->setUsername( "Luca" ); // optional
loginDialog->setUsername( "Luca" ); // optional
connect( loginDialog,
connect( loginDialog,
  SIGNAL (acceptLogin(QString&amp;amp;,QString&amp;amp;,int&amp;amp;)),
  SIGNAL (acceptLogin(QString&,QString&,int&)),
  this,
  this,
  SLOT (slotAcceptUserLogin(QString&amp;amp;,QString&amp;amp;)));
  SLOT (slotAcceptUserLogin(QString&,QString&)));
loginDialog->exec();
loginDialog->exec();


</code>
</code>

Revision as of 17:54, 12 March 2015

This article may require cleanup to meet the Qt Wiki's quality standards. Reason: Auto-imported from ExpressionEngine.
Please improve this article if you can. Remove the {{cleanup}} tag and add this page to Updated pages list after it's clean.

An example of user login dialog

This code snippets shows how to implement a simple dialog window that allows the user to enter his username and password in order to make a login attempt. The dialog window will emit a signal in order to notify a listener for the login credentials. The login dialog can also presents a list of usernames to select one from. The dialog also allows for the proposal of a specified username/password as it could be loaded from a settings or a configuration file.

Header file

#include <QDialog>
#include <QLabel>
#include <QPushButton>
#include <QDialogButtonBox>
#include <QLineEdit>
#include <QComboBox>
#include <QGridLayout>
#include <QStringList>
#include <QDebug>

/*!
 '''Makes class LoginDialog a child to its parent, QDialog
*/
class LoginDialog : public QDialog
{
/*!
 '''Turns Login Dialog into a QObject
*/
 Q_OBJECT

private:
 /*!
 * A label for the username component.
 */
 QLabel''' labelUsername;

/*!
 * A label for the password.
 */
 QLabel''' labelPassword;

/*!
 * An editable combo box for allowing the user
 * to enter his username or select it from a list.
 */
 QComboBox''' comboUsername;

/*!
 * A field to let the user enters his password.
 */
 QLineEdit''' editPassword;

/*!
 * The standard dialog button box.
 */
 QDialogButtonBox''' buttons;

/*!
 * A method to set up all dialog components and
 * initialize them.
 */
 void setUpGUI();

public:
 explicit LoginDialog(QWidget '''parent = 0);

 /*!
 * Sets the proposed username, that can come for instance
 * from a shared setting.
 '''username the string that represents the current username
''' to display
 */
 void setUsername( QString& username );

 /*!
 * Sets the current password to propose to the user for the login.
 * password the password to fill into the dialog form
 */
 void setPassword( QString& password );

 /*!
 * Sets a list of allowed usernames from which the user
 * can pick one if he does not want to directly edit it.
 '''usernames a list of usernames
*/
 void setUsernamesList( const QStringList& usernames );

signals:

/*!
 * A signal emitted when the login is performed.
 * username the username entered in the dialog
 * password the password entered in the dialog
 * index the number of the username selected in the combobox
 */
 void acceptLogin( QString& username, QString& password, int& indexNumber );

public slots:
 /*!
 * A lot to adjust the emitting of the signal.
 */
 void slotAcceptLogin();

};

#endif // LOGINDIALOG_H

Implementation

LoginDialog::LoginDialog(QWidget '''parent) :
 QDialog(parent)
{
 setUpGUI();
 setWindowTitle( tr("User Login") );
 setModal( true );
}

void LoginDialog::setUpGUI(){
 // set up the layout
 QGridLayout''' formGridLayout = new QGridLayout( this );

// initialize the username combo box so that it is editable
 comboUsername = new QComboBox( this );
 comboUsername->setEditable( true );
 // initialize the password field so that it does not echo
 // characters
 editPassword = new QLineEdit( this );
 editPassword->setEchoMode( QLineEdit::Password );

// initialize the labels
 labelUsername = new QLabel( this );
 labelPassword = new QLabel( this );
 labelUsername->setText( tr( "Username" ) );
 labelUsername->setBuddy( comboUsername );
 labelPassword->setText( tr( "Password" ) );
 labelPassword->setBuddy( editPassword );

// initialize buttons
 buttons = new QDialogButtonBox( this );
 buttons->addButton( QDialogButtonBox::Ok );
 buttons->addButton( QDialogButtonBox::Cancel );
 buttons->button( QDialogButtonBox::Ok )->setText( tr("Login") );
 buttons->button( QDialogButtonBox::Cancel )->setText( tr("Abort") );

 // connects slots
 connect( buttons->button( QDialogButtonBox::Cancel ),
 SIGNAL (clicked()),
 this,
 SLOT (close())
 );

connect( buttons->button( QDialogButtonBox::Ok ),
 SIGNAL (clicked()),
 this,
 SLOT (slotAcceptLogin()) );

// place components into the dialog
 formGridLayout->addWidget( labelUsername, 0, 0 );
 formGridLayout->addWidget( comboUsername, 0, 1 );
 formGridLayout->addWidget( labelPassword, 1, 0 );
 formGridLayout->addWidget( editPassword, 1, 1 );
 formGridLayout->addWidget( buttons, 2, 0, 1, 2 );

setLayout( formGridLayout );

}

void LoginDialog::setUsername(QString &username){
 bool found = false;
 for( int i = 0; i < comboUsername->count() && ! found ; i++ )
 if( comboUsername->itemText( i ) == username ){
 comboUsername->setCurrentIndex( i );
 found = true;
 }

if( ! found ){
 int index = comboUsername->count();
 qDebug() << "Select username " << index;
 comboUsername->addItem( username );

comboUsername->setCurrentIndex( index );
 }

// place the focus on the password field
 editPassword->setFocus();
}

void LoginDialog::setPassword(QString &password){
 editPassword->setText( password );
}

void LoginDialog::slotAcceptLogin(){
 QString username = comboUsername->currentText();
 QString password = editPassword->text();
 int index = comboUsername->currentIndex();

emit acceptLogin( username, // current username
 password, // current password
 index // index in the username list
 );

// close this dialog
 close();
}

void LoginDialog::setUsernamesList(const QStringList &usernames){
 comboUsername->addItems( usernames );
}

Usage example

LoginDialog* loginDialog = new LoginDialog( this );
loginDialog->setUsername( "Luca" ); // optional
connect( loginDialog,
 SIGNAL (acceptLogin(QString&,QString&,int&)),
 this,
 SLOT (slotAcceptUserLogin(QString&,QString&)));
loginDialog->exec();