User Login Dialog: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
No edit summary
(Cleanup)
 
(3 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{LangSwitch}}
[[Category:HowTo]]
[[Category:HowTo]]
[[Category:snippets]]
[[Category:snippets]]
 
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.
= 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 ==
== Header file ==
Line 72: Line 69:
''' to display
''' to display
  */
  */
  void setUsername( QString& username );
  void setUsername( QString& username );


  /*!
  /*!
Line 78: Line 75:
  * 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 85: Line 82:
  '''usernames a list of usernames
  '''usernames a list of usernames
*/
*/
  void setUsernamesList( const QStringList& usernames );
  void setUsernamesList( const QStringList& usernames );


signals:
signals:
Line 95: Line 92:
  * 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 167: Line 164:
}
}


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 187: Line 184:
}
}


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


void LoginDialog::setUsernamesList(const QStringList &amp;usernames){
void LoginDialog::setUsernamesList(const QStringList &usernames){
  comboUsername->addItems( usernames );
  comboUsername->addItems( usernames );
}
}
Line 216: Line 213:
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>

Latest revision as of 00:03, 28 June 2015

En Ar Bg De El Es Fa Fi Fr Hi Hu It Ja Kn Ko Ms Nl Pl Pt Ru Sq Th Tr Uk Zh

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();