User Login Dialog: Difference between revisions
Jump to navigation
Jump to search
AutoSpider (talk | contribs) (Add "cleanup" tag) |
AutoSpider (talk | contribs) (Decode HTML entity names) |
||
Line 74: | Line 74: | ||
''' to display | ''' to display | ||
*/ | */ | ||
void setUsername( QString& | 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& | void setPassword( QString& password ); | ||
/*! | /*! | ||
Line 87: | Line 87: | ||
'''usernames a list of usernames | '''usernames a list of usernames | ||
*/ | */ | ||
void setUsernamesList( const QStringList& | 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& | void acceptLogin( QString& username, QString& password, int& indexNumber ); | ||
public slots: | public slots: | ||
Line 169: | Line 169: | ||
} | } | ||
void LoginDialog::setUsername(QString & | void LoginDialog::setUsername(QString &username){ | ||
bool found = false; | bool found = false; | ||
for( int i = 0; i < comboUsername->count() & | 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 & | void LoginDialog::setPassword(QString &password){ | ||
editPassword->setText( password ); | editPassword->setText( password ); | ||
} | } | ||
Line 207: | Line 207: | ||
} | } | ||
void LoginDialog::setUsernamesList(const QStringList & | 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& | SIGNAL (acceptLogin(QString&,QString&,int&)), | ||
this, | this, | ||
SLOT (slotAcceptUserLogin(QString& | 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();