QT 登陆对话框

该文章原创于Qter开源社区(www.qter.org),作者yafeilinux,转载请注明出处!

正文



一、创建项目

1.新建Qt Gui应用,项目名称为“login”,类名和基类保持MainWindow和QMainWindow不变。

2.完成项目创建后,向项目中添加新的Qt设计师界面类,模板选择Dialog without Buttons,类名更改为LoginDialog。完成后向界面上添加两个标签Label、两个行编辑器Line Edit和两个按钮Push Button,设计界面如下图所示。

<ignore_js_op>

3.这里在属性编辑器中将用户名后面的行编辑器的object Name属性更改为usrLineEdit,密码后面的行编辑器为pwdLineEdit,登录按钮为loginBtn,退出按钮为exitBtn。如下图所示。

<ignore_js_op>

4.下面我们使用另外一种信号和槽的关联方法来设置退出按钮。在设计模式下面的信号和槽编辑器中,先点击左上角的绿色加号添加关联,然后选择发送者为exitBtn,信号为clicked(),接收者为LoginDialog,槽为close()。如下图所示。这样,当单击退出按钮时,就会关闭登录对话框。

<ignore_js_op>

5.右击登录按钮,在弹出的菜单中选择“转到槽…”,然后选择clicked()信号并确定。转到相应的槽以后,添加函数调用:

void LoginDialog::on_loginBtn_clicked()

{

accept();

}

6.下面到main.cpp文件,更改内容如下:

#include <QtGui/QApplication>

#include "mainwindow.h"

#include "logindialog.h"

int main(int argc, char *argv[])

{

QApplication a(argc, argv);

MainWindow w;

LoginDialog dlg;

if (dlg.exec() == QDialog::Accepted)

{

w.show();

return a.exec();

}

else return 0;

}

7.这时运行程序,按下退出按钮会退出程序,按下登录按钮会关闭登录对话框,并显示主窗口。

二、登录设置

1.下面添加代码来实现使用用户名和密码登录,这里我们只是简单的将用户名和密码设置为了固定的字符串。到logindialog.cpp文件中将登录按钮的单击信号对应的槽的代码更改为:

void LoginDialog::on_loginBtn_clicked()

{

// 判断用户名和密码是否正确,

// 如果错误则弹出警告对话框

if(ui->usrLineEdit->text() == tr("yafeilinux") &&

ui->pwdLineEdit->text() == tr("123456"))

{

accept();

} else {

QMessageBox::warning(this, tr("Waring"),

tr("user name or password error!"),

QMessageBox::Yes);

}

}

Qt中的QMessageBox类提供了多种常用的对话框类型,比如这里的警告对话框,还有提示对话框,问题对话框等。这里使用了静态函数来设置了一个警告对话框,这种方式很方便。其中的参数依次是:this表明父窗口是登录对话框;然后是窗口标题;然后是显示的内容;最后一个参数是显示的按钮,这里使用了一个Yes按钮。大家注意还要添加该类的头文件包含,即:#include <QMessageBox>。

2.下面运行程序,如果输入用户名为“yafeilinux”,密码为“123456”,那么可以登录,如果输入其他的字符,则会弹出警告对话框,如下图所示。

<ignore_js_op>

3.对于输入的密码,我们常见的是显示成小黑点的样式。下面点击logindialog.ui文件进入设计模式,然后选中界面上的密码行编辑器,在属性编辑器中将echoMode属性选择为Password。这时再次运行程序,可以看到密码显示已经改变了。如下图所示。

<ignore_js_op>

当然,除了在属性编辑器中进行更改,也可以在loginDialog类的构造函数中使用setEchoMode(QLineEdit::Password)函数来设置。

4.在行编辑器的属性栏中还可以设置占位符,就是没有输入信息前的一些提示语句。例如将密码行编辑器的placeholderText属性更改为“请输入密码”,将用户名行编辑器的更改为“请输入用户名”,运行效果如下图所示。

<ignore_js_op>

5.对于行编辑器,还有一个问题就是,比如我们输入用户名,在前面添加了一个空格,这样也可以保证输入是正确的,这个可以使用QString类的trimmed()函数来实现,它可以去除字符串前后的空白字符。下面将logindialog.cpp文件中登录按钮单击信号槽函数中的判断代码更改为:

if(ui->usrLineEdit->text().trimmed() == tr("yafeilinux")

&& ui->pwdLineEdit->text() == tr("123456"))

这时运行程序,已经实现相应的功能了。

6.最后,当登录失败后,我们希望可以清空用户名和密码信息,并将光标定位到用户名输入框中。这个可以通过在判断用户名和密码错误后添加相应的代码来实现:

void LoginDialog::on_loginBtn_clicked()

{

// 判断用户名和密码是否正确,如果错误则弹出警告对话框

if(ui->usrLineEdit->text().trimmed() == tr("yafeilinux")

&& ui->pwdLineEdit->text() == tr("123456"))

{

accept();

} else {

QMessageBox::warning(this, tr("Waring"),

tr("user name or password error!"),

QMessageBox::Yes);

// 清空内容并定位光标

ui->usrLineEdit->clear();

ui->pwdLineEdit->clear();

ui->usrLineEdit->setFocus();

}

}

下面运行程序,大家可以测试一下效果。

7.这里再补充一个技巧,也就是Qt Creator的代码补全功能。Qt Creator有很强大的代码补全功能,比如输入一个关键字时,只要输入前几个字母,就会弹出相关的关键字的选择列表;输入完一个对象,然后输入点以后,就会弹出该对象所有可用的变量和函数。这里要说的是,当输入一个比较长得函数或变量名时,可以通过其中的几个字母来定位。比如说,要输入前面讲到的setFocus()函数,那么只需输入首字母s和后面的大写字母F即可,这样可以大大缩减提示列表,如果还没有定位到,那么可以输入F后面的字母。如下图所示。

<ignore_js_op>

我们还可以使用ctrl + 空格键来强制代码补全,不过这个一般会和我们的输入法的快捷键冲突,大家可以更改输入法的快捷键,也可以在Qt Creator中的工具→选项→环境→键盘中来设置快捷键。

结语



       这一节又讲解了一种信号和槽的关联方法,还讲解了一些部件的属性设置等内容。在《Qt Creator快速入门》一书中还讲解了大量常用的部件的使用说明,大家可以参考一下

时间: 2024-08-03 15:31:14

QT 登陆对话框的相关文章

如何修改Qt标准对话框的文字(例如,英文改成中文)

此篇文章参考qtcn论坛整理而成,因为文字和图片是本人亲自组织,所以仍算原创. http://www.qtcn.org/bbs/read-htm-tid-30650.html http://blog.csdn.net/yangxiao_0203/article/details/7488967 如图所示,QT自带的内建标准对话框QFontDialog.QColorDialog.QMessageBox.默认的文字全是英文的.QLineEdit和QTextEdit的右键菜单,默认的文字也全是英文的.请

Qt标准对话框之QColorDialog

Qt中提供了一些标准的对话框,用于实现一些常用的预定义功能,比如本节中将要介绍的颜色对话框——QColorDialog. 在不同的系统平台下,颜色对话框的显示效果可能会有所不同,主要因系统主题风格而异,但是功能是相同的,显示效果如下: 查看帮助文档的话,我们可以看到这个类提供的方法还是很多的,但是我们一般情况下用到的也就一个静态的成员方法:getColor(),该函数的原型如下: 1 QColor QColorDialog::getColor(const QColor & initial = Q

QT常用对话框的使用以及实现

考虑的QT的对话框的内容颇多,很难记,而且使用起来往往相同的操作,所以将自己敲的各个常用对话框的使用方法上传.以下包含了颜色对话框.打开单个(多个)文件对话框,字体对话框.输入对话框.提示信息对话框.进度对话框.QErrorMessage对话框,以及向导对话框. 废话少说,直接上代码: //颜色对话框 QColor color = QColorDialog::getcolor(Qt::red,this,tr("颜色对话框")); //获取选择的颜色再去设置即可 //文件对话框 QStr

12个QT基本对话框,以及淡入原理(用定时器把窗口逐渐变成透明)

一.基本对话框 1,核心库: 界面程序 QApplication 非程序界面QCoreAppliction 2,消息循环必须执行QApplication.exec(); 3,消息绑定机制: 信号-槽 信号可以对应信号,也可以对应槽. 一个信号可以对应多个信号和多个槽. 4,QT基本对话框: QErrorMessage, QInputDialog, QMessageBox, QPrintDialog, QProgressDialog, QFileDialog, QAbstractPrintDial

Qt标准对话框:QMessageBox

Qt标准对话框之QMessageBox 这次来说一下QMessageBox以及类似的几种对话框.其实,我们已经用过QMessageBox了,就在之前的几个程序中.不过,当时是大略的说了一下,现在专门来说说这几种对话框. 先来看一下最熟悉的QMessageBox::information.我们在以前的代码中这样使用过: QMessageBox::information(NULL, "Title", "Content", QMessageBox::Yes | QMess

QT模态对话框及非模态对话框

QT模态对话框及非模态对话框 模态对话框(Modal Dialog)与非模态对话框(Modeless Dialog)的概念不是Qt所独有的,在各种不同的平台下都存在.又有叫法是称为模式对话框,无模式对话框等.所谓模态对话框就是在其没有被关闭之前,用户不能与同一个应用程序的其他窗口进行交互,直到该对话框关闭.对于非模态对话框,当被打开时,用户既可选择和该对话框进行交互,也可以选择同应用程序的其他窗口交互. 在Qt中,显示一个对话框一般有两种方式,一种是使用exec()方法,它总是以模态来显示对话框

QT 选择对话框简单示例

QT 选择对话框简单示例 部分代码: pDialog->addSeparator(); QAction *pmb2 = pDialog->addAction(QString::fromLocal8Bit("选择对话框")); connect(pmb2, &QAction::triggered, [this](){ QMessageBox * mBox = new QMessageBox(this); mBox->setWindowTitle(QString::

QT模态对话框用法(在UI文件中设置Widget背景图,这个图是一个带阴影边框的图片——酷)

QT弹出模态对话框做法: 1.新建UI文件时,一定要选择基类是QDialog的,我的选择是:Dialog without Buttons(),如下图: 2.然后在使用的时候: MyDialog dlg(this); dlg.exec(); 如果不加this,则会在任务管理器里面产生一个新的EXE. 3.如果对话框的标题是自定义,不想使用系统的标题,这时候需要在代码中加入: setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint ); setAttr

Android 登陆对话框

1 public class LoginActivity extends Activity { 2 3 @Override 4 public void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 7 setContentView(R.layout.activity_login); 8 9 showWaiterAuthorizationDialog(); 10 } 11 12 // 显示