案例涉及知識點:窗口、對話框、標籤、文本框、按鈕、事件處理。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源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。