Qtday2作业

1.

头文件

widget.h 

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QDebug>
#include<QIcon>
#include<QPushButton>
#include<QLineEdit>
#include<QLabel>
#include<QMovie>
class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
    QPushButton *loginbutton;
    QPushButton *cancelbutton;
    QLineEdit * Username;
    QLineEdit * pwd;
    QLabel *lab1;
    QLabel *lab2;
    QLabel *logo;
    QMovie  *movie1;
public slots:
    void cancelBtton_slot();   //取消登录的槽函数
    void loginbutton_slot();   //成功的登录的槽函数

signals:
    void jump();            //跳转信号


};
#endif // WIDGET_H

 newwidget

#ifndef NEWWIDGET_H
#define NEWWIDGET_H

#include <QWidget>

namespace Ui {
class newwidget;
}

class newwidget : public QWidget
{
    Q_OBJECT

public:
    explicit newwidget(QWidget *parent = nullptr);
    ~newwidget();
public slots:
    void jump_slot();  //跳转界面的槽函数

private:
    Ui::newwidget *ui;
};

#endif // NEWWIDGET_H

main 

#include "widget.h"
#include "newwidget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;

    w.show();
    newwidget s;

    //连接两个界面的信号与槽
    QObject::connect(&w, &Widget::jump, &s, &newwidget::jump_slot);
    return a.exec();
}

 widget.cpp

#include "widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    // 固定界面的大小
    this->setFixedSize(800,800);

    // 设置透明度为0.8
    this->setWindowOpacity(0.9);

    // 设置窗口标题
    this->setWindowTitle("新爷聊天室");

    // 设置窗口图标
    this->setWindowIcon(QIcon(":/icon/labixiaoxin.jpg"));

    // 设置输入输出文本框(将密码文本设置成密文)
    Username = new QLineEdit(this);  // 账户
    Username->resize(300,40);  // 设置文本框大小
    Username->move(250,450);
    Username->setPlaceholderText("账户");


    pwd = new QLineEdit(this);  // 密码
    pwd->resize(300,40);
    pwd->move(250,500);
    pwd->setEchoMode(QLineEdit::Password);
    pwd->setPlaceholderText("密码");
    // 设置登录和取消按钮(图标形式)
    loginbutton = new QPushButton(this);
    cancelbutton = new QPushButton(this);
    loginbutton->setText("登录");
    cancelbutton->setText("取消");
    loginbutton->resize(80,30);
    cancelbutton->resize(80,30);
    loginbutton->move(300,550);
    cancelbutton->move(400,550);
    loginbutton->setIcon(QIcon(":/icon/denglu_1.png"));
    cancelbutton->setIcon(QIcon(":/icon/quxiao.png"));




    // 将账户和密码设置成图标形式
    lab1 = new QLabel(this);
    lab2 = new QLabel(this);
    lab1->resize(40,40);
    lab2->resize(40,40);
    lab1->move(200,450);
    lab2->move(200,500);
    lab1->setScaledContents(true);
    lab2->setScaledContents(true);
    lab1->setPixmap(QPixmap(":/icon/denglu.png"));
    lab2->setPixmap(QPixmap(":/icon/denglumima.png"));

    // 设置登录窗口的logo


    movie1 = new QMovie(":/icon/tubiao.gif");
    logo = new QLabel(this);
    logo->resize(700,350);
    logo->move(50,0);
    logo->setMovie(movie1);
    movie1->start();
    logo->setScaledContents(true);

    //基于qt4版本的连接,将取消按钮连接到自定义的槽函数中处理相关逻辑
    connect(cancelbutton,SIGNAL(clicked()),this,SLOT(cancelBtton_slot()));

    //基于qt5链接的登录信号

    connect(loginbutton,&QPushButton::clicked,this,&Widget::loginbutton_slot);









}

Widget::~Widget()
{
}

void Widget::cancelBtton_slot()  //取消登录
{
    this->close();
}
void Widget::loginbutton_slot()  //登录成功
{
    QString username = Username->text();
    QString Pwd = pwd->text();

    if (username == "admin" && Pwd == "888888")
    {

        emit this->jump();
        qDebug()<<"登录成功";
        this->close();
    }else
    {
        qDebug()<<"登录失败,请重新登录";
        pwd->clear();
    }

}


newwidget.cpp

#include "newwidget.h"
#include "ui_newwidget.h"

newwidget::newwidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::newwidget)
{
    ui->setupUi(this);
}

newwidget::~newwidget()
{
    delete ui;
}
void newwidget::jump_slot()
{
    this->show();
}

2.

 工程管理文件

QT       += core gui
#表示引入qt所需要的类库,如核心库,图形化界面库
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
#如果超过4.0版本,系统会自动加上widigets库
CONFIG += c++11
#该版本的qt支持C++后的语法

# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
#管理源文件
SOURCES += \
    main.cpp \
    widget.cpp
#管理头文件
HEADERS += \
    widget.h
#管理ui文件
FORMS += \
    widget.ui

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

头文件

#ifndef WIDGET_H
#define WIDGET_H //防止文件重复包含

#include <QWidget>//所需头文件

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }  //将ui界面对应的头文件中的命名空间进行声明
QT_END_NAMESPACE

//自定义类名
class Widget : public QWidget
{
    Q_OBJECT   //信号与槽的元对象

public:
    Widget(QWidget *parent = nullptr);//构造函数的声明
    ~Widget();//析构函数

private:
    Ui::Widget *ui;  //使用ui界面对应头文件中命名空间中的类定义的指针
    //后期如果想要使用ui界面拖拽出来的组件,可以通过该指针找到
    //自己类中定义的组价,后期需要用this指针找到
};
#endif // WIDGET_H

源文件

#include "widget.h"//引入自定义的头文件
#include "ui_widget.h"//引入ui界面的头文件

Widget::Widget(QWidget *parent)
    : QWidget(parent)//调用父类的有参构造
    , ui(new Ui::Widget)//构造出ui界面拖拽的成员,并且将地址赋值给ui指针
{
    ui->setupUi(this);//调用设置界面函数,给ui界面上的组件申请空间
}
//析构函数的定义
Widget::~Widget()
{
    delete ui; //释放ui界面上的组件空间
}

主函数

#include "widget.h"  //将自定义的头文件导入

#include <QApplication>//引用应用程序的头文件

int main(int argc, char *argv[]) //主函数
{
    QApplication a(argc, argv); //使用应用程序类,实例化一个类对象,调用有参构造
    //使用自定义的类实例化的对象
    Widget w;  //调用无参构造函数,实例化一个界面,该界面没有父组件独立存在,别的组件依附于该界面而存在
    w.show();  //将图形化界面展示出来
    return a.exec(); //阻塞等待界面的相关响应工作:用户界面上的操作,信号与槽,事件处理
}

思维导图 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值