(二)QT5手动编写界面之登录界面

1.1、登录最终界面

在这里插入图片描述

1.2、创建工程

请参考我前面写的这篇文章: (一)QT5之手动编写界面创建工程

1.3、设定窗口大小

设定窗口大小的函数有两个:

setMinimumSize(0, 0);
setMaximumSize(QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX));

如同函数名,设置最大和最小,只要把这两者的大小设定一致,就可以达到窗体大小的限定,但是我们一般不使用这个,我们是用的是这个函数: void setFixedSize(int w, int h),其中
setFixedSize 相当于设置了最小大小和最大大小,所以使用该函数即可。

当然我们首先需要设置窗体的大小,使用该函数:void resize(int w, int h) ,通过两个参数就可以设置窗体的大小了。下面是我的设置:
在这里插入图片描述

1.4、三大控件

我们需要三个控件,分别是QLable,QLineEdit,QButton。由于目前我刚开始学习,所以打算使用绝对位置来布局,后面学习到水平和垂直布局之后在使用布局。

所以我限定窗体大小。

在QT中,头文件和类是对应上的,所以我们在创建时候使用对应的头文件名即可,这三个控件分别对应三个头文件:

#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QPushButton>

所以对应的在类的申明里面定义三个public变量如下:

在这里插入图片描述

创建对应的对象使用new关键字,如下图:
在这里插入图片描述

1.5、绝对位置布局

setGeometry 函数,可以自由的调整位置,但是如果使用layout,该函数将不起作用,所以目前我没学到layout块布局,所以使用setGeometry。

qt中 void setGeometry(int x, int y, int w, int h) 很简单,一共有四个参数,分别对应的位置和大小,然后根据实际的窗体来布局即可。

我在其中的布局是:
在这里插入图片描述
然后运行就可以得到我们的界面了,接下来是单击信号的处理,我们将使用到槽这个功能。

1.6、信号与槽

我们当中使用按键触发点击事件来做一些处理,那么这里使用到信号和槽,目前我的水平经过百度,只是在会用阶段,我大概说一下流程:

1、申明按键触发的两个回调函数
在这里插入图片描述
2、实现这两个回调函数
在这里插入图片描述
确定按钮实现的是判断密码和账户是否相同,取消按钮实现的功能是退出整个程序。

3、将按钮点击事件绑定到对应的信号和回调函数上面去。
在这里插入图片描述
使用的是QObject::connect该方法,里面需要填入四个参数,第一个就是你的按钮,第二个是信号触发方式,第三个是this指针,第四个是你写的回调函数,这样即可完成绑定。

1.7、测试

账号和密码相同:
在这里插入图片描述
在下面将会输出登录成功log。

账号和密码不相同:
在这里插入图片描述
log输出登录失败,到此,第一个手动编写的登录界面已经结束了。

1.8、程序源码

widget.h文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QPushButton>
#include <QDebug>

class Widget : public QWidget
{
    Q_OBJECT

public:

    Widget(QWidget *parent = 0);
    ~Widget();

    void set_ui();

public slots:
    void btn_login_clicked(bool);
    void btn_quit_clicked(bool);

private:
    QLabel *lab_name;
    QLabel *lab_passwd;

    QLineEdit *line_name;
    QLineEdit *line_passwd;
    QPushButton *btn_login;
    QPushButton *btn_quit;


};

#endif // WIDGET_H

widget.c文件

#include "widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    this->set_ui(); //直接运行这个设置ui
}

Widget::~Widget()
{

}

void Widget::set_ui()
{
    this->resize(600,400);
    this->setFixedSize(this->width(),this->height()); //设置窗体变化限定死

    this->lab_name   = new QLabel(this);
    this->lab_passwd = new QLabel(this);

    this->lab_name->setText("账号:");
    this->lab_passwd->setText("密码:");

    this->line_name   = new QLineEdit(this);
    this->line_passwd = new QLineEdit(this);
    this->line_passwd->setEchoMode(QLineEdit::Password);



    this->btn_login = new QPushButton(this);
    this->btn_login->setText("确定");

    this->btn_login->setGeometry(200,200,95,25);

    this->btn_quit = new QPushButton(this);
    this->btn_quit->setText("取消");


    this->lab_name->setGeometry(200, 100, 30, 25);
    this->lab_passwd->setGeometry(200, 150, 30, 25);

    this->line_name->setGeometry(250, 100, 150, 25);
    this->line_passwd->setGeometry(250, 150, 150, 25);

    this->btn_quit->setGeometry(310,200,90,25);
    this->btn_login->setGeometry(200,200,95,25);

    QObject::connect(this->btn_login,SIGNAL(clicked(bool)),this,SLOT(btn_login_clicked(bool)));
    QObject::connect(this->btn_quit,SIGNAL(clicked(bool)),this,SLOT(btn_quit_clicked(bool)));

}


void Widget::btn_login_clicked(bool)
{
    QString name = this->line_name->text();
    QString passwd = this->line_passwd->text();

    if(name == passwd){
        qDebug() << "登录成功" << endl;
    }
    else {
        qDebug() << "登录失败" << endl;
    }
}
void Widget::btn_quit_clicked(bool)
{
    this->close();
}

发布了29 篇原创文章 · 获赞 0 · 访问量 417

猜你喜欢

转载自blog.csdn.net/weixin_42547950/article/details/104349575