QT案例:登陸對話框——主窗口

案例涉及知識點:窗口、對話框、標籤、文本框、按鈕、事件處理。ide

一、新建一個Qt Widgets Application——MultiWindowDemo函數


二、建立一個Qt設計師界面類LoginDialog測試






三、設計登陸對話框界面ui


四、選中【登陸】按鈕,單擊右鍵,選擇「轉到槽……」,選擇clicked()信號this


五、同理,給【取消】按鈕添加單擊事件處理槽spa


六、在logindialog.h裏添加信號和槽.net


#ifndef LOGINDIALOG_H
#define LOGINDIALOG_H

#include <QDialog>

namespace Ui {
class LoginDialog;
}

class LoginDialog : public QDialog
{
    Q_OBJECT

public:
    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

七、修改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();
}

八、修改logindialog.cpp3d

(1)構造函數裏設置密碼框顯示模式,而且設置信號函數與槽函數之間的聯繫code


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

九、運行程序,查看效果


不輸入用戶名和密碼就單擊【登陸】按鈕:


輸入用戶名,可是不輸入密碼,單擊【登陸】按鈕:


輸入正確的用戶名和密碼,單擊【登陸】按鈕:




若是在登陸對話框裏輸入錯誤的用戶名或密碼,單擊【登陸】按鈕:


本文分享 CSDN - howard2005。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索