900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > QT案例:登录对话框——主窗口

QT案例:登录对话框——主窗口

时间:2020-07-06 19:40:00

相关推荐

QT案例:登录对话框——主窗口

目录

一、案例涉及知识点

二、案例实现步骤

1、新建一个Qt Widgets Application——MultiWindowDemo

2、创建一个Qt设计师界面类LoginDialog

3、设计登录对话框界面

4、选中【登录】按钮,单击右键,选择“转到槽……”,选择clicked()信号

5、同理,给【取消】按钮添加单击事件处理槽

6、在logindialog.h里添加信号和槽

7、修改main.cpp,定义登录对话框作为主窗口的子控件,设置对话框标题,并屏幕居中

8、修改logindialog.cpp

9、运行程序,查看效果

一、案例涉及知识点

窗口、对话框、标签、文本框、按钮、事件处理。

二、案例实现步骤

1、新建一个Qt Widgets Application——MultiWindowDemo

2、创建一个Qt设计师界面类LoginDialog

3、设计登录对话框界面

4、选中【登录】按钮,单击右键,选择“转到槽……”,选择clicked()信号

5、同理,给【取消】按钮添加单击事件处理槽

6、在logindialog.h里添加信号和槽

#ifndef LOGINDIALOG_H#define LOGINDIALOG_H#include <QDialog>namespace Ui {class LoginDialog;}class LoginDialog : public QDialog{Q_OBJECTpublic:explicit LoginDialog(QWidget *parent = 0);~LoginDialog();signals:void login(QString username, QString password);void cancel();private slots:void on_btnLogin_clicked();void on_btnCancel_clicked();void loginSlot(QString username, QString password);void cancelSlot();private:Ui::LoginDialog *ui;};#endif // LOGINDIALOG_H

7、修改main.cpp,定义登录对话框作为主窗口的子控件,设置对话框标题,并屏幕居中

#include "mainwindow.h"#include <QApplication>#include <logindialog.h>#include <qdesktopwidget.h>int main(int argc, char *argv[]){QApplication a(argc, argv);MainWindow w;w.setWindowTitle("测试系统");QDesktopWidget *desktop = QApplication::desktop();LoginDialog login(&w);login.setWindowTitle("登录");login.show();login.move((desktop->width() - login.width())/ 2, (desktop->height() - login.height()) /2);return a.exec();}

8、修改logindialog.cpp

(1)构造函数里设置密码框显示模式,并且设置信号函数与槽函数之间的联系

(2)编写登录按钮单击事件处理函数

(3)编写取消按钮单击事件处理函数

(4)编写登录槽函数loginSlot

(5)编写取消槽函数cancelSlot

logindialog.cpp完整代码:

#include "logindialog.h"#include "ui_logindialog.h"#include "mainwindow.h"#include "qmessagebox.h"LoginDialog::LoginDialog(QWidget *parent) :QDialog(parent),ui(new Ui::LoginDialog){ui->setupUi(this);// 设置密码框显示模式ui->edtPassword->setEchoMode(QLineEdit::Password);// 设置信号函数与槽函数之间的联系connect(this, &LoginDialog::login, this, &LoginDialog::loginSlot);connect(this, &LoginDialog::cancel, this, &LoginDialog::cancelSlot);}LoginDialog::~LoginDialog(){delete ui;}void LoginDialog::on_btnLogin_clicked(){QString username = ui->edtUsername->text();QString password = ui->edtPassword->text();emit login(username, password);}void LoginDialog::on_btnCancel_clicked(){emit cancel();}void LoginDialog::loginSlot(QString username, QString password){// 非空校验if (username.trimmed().length() == 0) {QMessageBox::information(this, "提示", "用户名不能为空!");ui->edtUsername->setFocus();return;}if (password.trimmed().length() == 0) {QMessageBox::information(this, "提示", "密码不能为空!");ui->edtPassword->setFocus();return;}// 用户合法性判断if (username == "howard" && password == "903213") {QMessageBox::information(this, "提示", "恭喜,登录成功!");parentWidget()->show();this->hide();} else {QMessageBox::information(this, "提示", "遗憾,登录失败!");}}void LoginDialog::cancelSlot(){// 清空用户名与密码文本框ui->edtUsername->setText("");ui->edtPassword->setText("");// 让用户名文本框获取焦点ui->edtUsername->setFocus();}

9、运行程序,查看效果

不输入用户名和密码就单击【登录】按钮:

输入用户名,但是不输入密码,单击【登录】按钮:

输入正确的用户名和密码,单击【登录】按钮:

如果在登录对话框里输入错误的用户名或密码,单击【登录】按钮:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。