【Qt学习笔记】001 基础篇——多窗口&登录界面

时间:2022-12-26 13:28:04

多窗口程序教程链接

登录对话框教程链接

由实例切入,打开新世界的大门,可能笔记做的不是很系统,但是是一个萌新不断发现的过程。

【Qt学习笔记】001 基础篇——多窗口&登录界面

和VS的MFC的项目管理界面很类似,把各个类型的文件统一做了分类。

以main.cpp为例 因为其余的程序都还没能读懂

#include "mainwindow.h"
#include <QApplication>
#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;
}
/*在Qt中选中语句按F1就可以查阅该语句的功能,类似MATLAB的帮助文档  说好的中文呢*/

QApplication类管理GUI应用的所有控制流和主要设置。第一条新建了一个QApplication的对象a,此后对整个GUI的控制应该都可以通过a中的函数来实现。

MainWindow类 和 LoginDialog 类是实在头文件中.h文件中定义,随着新建一个对话框自动生成的一个类,同样建立对象w和dlg自动与对话框交互(具体机理并不是很清楚),初步断定这两个类都是基于QDialog派生出来的。

exec()函数,激活模态对话框,返回值Accepted或者Rejected(这里应该是一个“槽”的概念)

也就是说,在主界面中,首先激活登录界面dlg,等待其返回值为Accepted时才激活主界面。

在LoginDialog.cpp中,进行条件判断,满足条件即用户名密码匹配正确,则向信号槽中注入Accepted(姑且这么说,并没有考证)

#include "logindialog.h"
#include "ui_logindialog.h"
#include <QMessageBox>

LoginDialog::LoginDialog(QWidget *parent) :
QDialog(parent),
ui( )
{
ui->setupUi(this);
}

LoginDialog::~LoginDialog()
{
delete ui;
}

void LoginDialog::on_loginBtn_clicked()
{
if(ui->usrLineEdit->text().trimmed() == tr("wanglingyu") &&
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();
}
}
这里ui应该是对话框类的对象,通过setupUi将当前对话框的指针指向该对象,再通过ui对象的函数操作对当前对话框中的元件进行定义。

ui->usrLineEdit->text().trimmed()
这句话充分显示了ui的用法,usrLineEdit是LoginDialog对话框中的一个文本框,其ObjectName被修改为usrLineEdit,每个环节都是一个对象(具体哪个类有待深入学习),text()返回值是文本框中的字符串,trimmed()的作用是删除字符串前后的空白字符。当该语句通过时,则注入Accepted,进入主界面。