【QT】day2

2023-09-18 21:11:23

1.完善登录框
点击登录按钮后,判断账号(admin)和密码(123456)是否一致,如果匹配失败,则弹出错误对话框,文本内容“账号密码不匹配,是否重新登录”,给定两个按钮ok和cancel,点击ok后,会清除密码框中的内容,继续进行登录;如果点击cancel按钮,则关闭界面。
如果账号和密码匹配,则弹出信息对话框,给出提示信息为“登录成功”,给出一个按钮ok,点击ok后,关闭整个登录界面,跳转到其他界面
点击取消按钮后,弹出问题对话框,询问是否确定要退出登录,给出两个按钮,yes|no,点击yes,则直接关闭整个登录界面,如果点击no则进行进行登录
要求:消息对话框,对象版和静态成员函数版至少各实现一个

demo.h

#ifndef DEMO_H
#define DEMO_H

#include <QWidget>

namespace Ui {
class demo;
}

class demo : public QWidget
{
    Q_OBJECT

public slots:
    void jump_slots();

public:
    explicit demo(QWidget *parent = nullptr);
    ~demo();

private:
    Ui::demo *ui;
};

#endif // DEMO_H

mywidget.h

#ifndef MYWIDGET_H
#define MYWIDGET_H      //防止文件重复引用

#include <QWidget>      //父类的头文件

#include <QDebug>       //信息调试类,用于输出数据使用
#include<QIcon>         //图标头文件
#include <QPushButton>  //按钮头文件
#include<QLineEdit>     //行类头文件
#include<QLabel>        //标签头文件
#include <QCheckBox>    //多选框头文件
#include <QMessageBox>  //对话框头文件

#include "demo.h"


QT_BEGIN_NAMESPACE
namespace Ui { class myWidget; }    //声明ui界面对应的头文件中的命名空间,这里不需要,注释掉
QT_END_NAMESPACE

//自定义了myWidget类,公共继承了Qwidget类
class myWidget : public QWidget
{
    Q_OBJECT    //信号与槽的元对象,没有这个对象,信号与槽就不能使用了

signals:
    void jump();

//槽函数
public slots:
    void on_bn_dl_clicked();
    void on_bn_qx_clicked();


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

//私有成员
private:
//    Ui::myWidget *ui;   //可以通过该指针调用ui界面上拖拽出来的组件,这里不用,注释掉
    QLineEdit *mm;
    QLineEdit *zh;
    QPushButton *bn_dl;
    QPushButton *bn_qx;
    demo *demo1;
};
#endif // MYWIDGET_H

demo.cpp

#include "demo.h"
#include "ui_demo.h"



void demo::jump_slots()
{
    this->show();
}

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

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

main.cpp

#include "mywidget.h"    //引入自定义图形化界面类的头文件
#include <QApplication> //引入应用程序类的头文件


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //使用应用程序类,实例化一个应用程序的对象

    myWidget w;
    //用自定义的图形化界面类实例化一个对象

    w.show();
    //调用show函数展示界面,父类提供的,可以展示自己的组件,以自己作为父组件的所有子组件也会被展示出来

    return a.exec();
    //阻塞等待应用程序,防止应用程序结束,等待用户操作、等待信号与槽、等待事件发生
}

mywidget.cpp

#include "mywidget.h"
//#include "ui_mywidget.h"


myWidget::myWidget(QWidget *parent)
    : QWidget(parent)   //显行调用父类的有参构造完成对子类从父类继承下来成员的初始化工作
//    , ui(new Ui::myWidget)  //给自己类中的指针成员初始化空间,ui界面中拖拽出来的组件在这个对象中,这里不用,注释掉
{
//    ui->setupUi(this);  //调用ui::myWidget里面的成员函数,给拖拽的组件实例化空间,并设置相关属性,这里不用, 注释掉
    //这里开始写所有界面设置

    //设置大窗口属性
    this->setFixedSize(530,399);//设置固定尺寸
    this->setWindowTitle("时光QQ"); //设置当前的窗口标题
    this->setWindowIcon(QIcon("D://Qt-project//HUAQING23062//day9//03homework//icon//shiguang02.jpg")); //设置当前窗口的标题图标
    this->setStyleSheet("background-color:green;");

    //设置一个图形标签
    QLabel *picture1=new QLabel(this);
    picture1->resize(530,160);
    picture1->setPixmap(QPixmap("D://Qt-project//HUAQING23062//day8//icon//shiguang01.jpg"));
    picture1->setScaledContents(true);

    //设置登录图标
    QLabel *p1=new QLabel(this);
    p1->resize(60,50);
    p1->move(80,180);
    p1->setPixmap(QPixmap("D://Qt-project//HUAQING23062//day8//icon//shiguang03.png"));
    p1->setScaledContents(true);

    //设置密码图标
    QLabel *p2=new QLabel(this);
    p2->resize(60,50);
    p2->move(p1->x(),p1->y()+80);
    p2->setPixmap(QPixmap("D://Qt-project//HUAQING23062//day8//icon//shanr02.jpg"));
    p2->setScaledContents(true);

    //设置登录行
    this->zh=new QLineEdit(this);
    zh->resize(300,50);
    zh->move(p1->x()+75,p1->y());
    zh->setStyleSheet("background-color:0;");
    zh->setPlaceholderText("请输入用户名");

    //设置密码行
    this->mm=new QLineEdit(this);
    mm->resize(300,50);
    mm->move(p2->x()+75,p2->y());
    mm->setStyleSheet("background-color:0;");
    mm->setPlaceholderText("请输入密码");
    mm->setEchoMode(QLineEdit::Password);

    //自动登录和记住密码
    QCheckBox *chb1=new QCheckBox(this);
    chb1->setText("自动登录");
    chb1->move(mm->x()+30,mm->y()+65);

    QCheckBox *chb2=new QCheckBox(this);
    chb2->setText("记住密码");
    chb2->move(chb1->x()+160,chb1->y());



    //登录按钮
    this->bn_dl=new QPushButton(this);
    bn_dl->setIcon(QIcon("D://Qt-project//HUAQING23062//day8//icon//shiguang02.jpg"));
    bn_dl->setText("登录");
    bn_dl->setStyleSheet("background-color:#138;");
    bn_dl->move(mm->x()+30,mm->y()+95);
    bn_dl->resize(80,35);

    //取消按钮
    this->bn_qx=new QPushButton(this);
    bn_qx->setIcon(QIcon("D://Qt-project//HUAQING23062//day8//icon//shiguang02.jpg"));
    bn_qx->setText("取消");
    bn_qx->setStyleSheet("background-color:#831;");
    bn_qx->move(bn_dl->x()+160,bn_dl->y());
    bn_qx->resize(80,35);

    //连接登录按钮的点击信号和槽函数
    connect(bn_dl,&QPushButton::clicked,this,&myWidget::on_bn_dl_clicked);
    //连接取消按钮的点击信号和槽函数
    connect(bn_qx,&QPushButton::clicked,this,&myWidget::on_bn_qx_clicked);


    demo1=new demo;
    //连接跳转信号和隔壁槽函数
    connect(this,&myWidget::jump,demo1,&demo::jump_slots);

}

myWidget::~myWidget()
{
//    delete ui;    //释放指针空间,这里没有用到,注释掉
}

//定义登录按钮的槽函数
void myWidget::on_bn_dl_clicked()
{
    QString username,psd;
    username=zh->text();
    psd=mm->text();
    if(username=="admin" && psd=="123456")
    {
        //对象版
        QMessageBox masg_login;
        masg_login.setIcon(QMessageBox::Information);
        masg_login.setInformativeText("点击ok后,将关闭整个登录界面,\n然后跳转到登录后的界面");
        masg_login.setWindowTitle("登录成功");
        masg_login.setStandardButtons(QMessageBox::Ok);
        masg_login.setDefaultButton(QMessageBox::Ok);
        int ret = masg_login.exec();               //展示对话框
        if(ret==QMessageBox::Ok)
        {
            qDebug()<<"111";
//            this->demo1->show();
            this->hide();
            emit jump();
//            this->demo1->show();
        }
    }else {
        //静态成员函数版
        int ret=QMessageBox::critical(this, "登录错误",
                             "账号密码不匹配,是否重新登录",
                             QMessageBox::Ok|QMessageBox::Cancel);

        if(ret==QMessageBox::Ok)
        {
            zh->clear();
            mm->clear();
        }else if(ret==QMessageBox::Cancel)
        {
            this->close();
        }

    }
}

//定义取消按钮的槽函数
void myWidget::on_bn_qx_clicked()
{
    //静态成员函数版
    int ret=QMessageBox::question(this, "提示",
                         "是否确定要退出登录?",
                         QMessageBox::Yes|QMessageBox::No);

    if(ret==QMessageBox::No)
    {
        bn_dl->click();
    }else if(ret==QMessageBox::Yes)
    {
        this->close();
    }
}


结果:
1

2
3
4

更多推荐

2023 Google 开发者大会:将大型语言模型部署到你的手机

在2022年末,不到半年时间,各家大语言模型的发展如雨后春笋,截至2023年9月,全球总共有接近100个大语言模型,可谓是百花齐放显而易见,大语言模型凭借出色的AI对话能力,已经逐渐深入各个行业2023Google开发者大会带来了AI专题,Google技术推广工程师魏巍提出“将大语言模型部署到个人终端”,关于这点,在外

[NLP] LLM---<训练中文LLama2(三)>对LLama2进行中文预料预训练

预训练预训练部分可以为两个阶段:第一阶段:冻结transformer参数,仅训练embedding,在尽量不干扰原模型的情况下适配新增的中文词向量。第二阶段:使用LoRA技术,为模型添加LoRA权重(adapter),训练embedding的同时也更新LoRA参数。第一阶段预训练由于第一阶段预训练会冻结transfor

Java基于SpringBoot的校园交友网站的设计与实现

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W+,Csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌文章目录一、效果演示二、前言介绍三、主要技术四、系统设计(部分)4.1、主要功能模块设计4.2、系统登录流程设计五、运行截图5.1、系统功能模块5.1.

Linux高性能服务器编程 学习笔记 第六章 高级IO函数

pipe函数用于创建一个管道,以实现进程间通信:fd参数是一个包含两个int的数组。该函数成功时返回0,并将一对打开的文件描述符填入其参数指向的数组,如果失败,则返回-1并设置errno。pipe函数创建的这两个文件描述符fd[0]和fd[1]分别构成管道的两端,往fd[1]写入的数组可以从fd[0]读出,并且fd[0

夸克扫描王识别精度领跑行业 愿携手各方伙伴探索AIGC应用新范式

日前,在“AIGC与场景化应用创新”主题研讨会上,阿里智能信息事业群夸克视觉技术负责人黄锐华分享了AI技术应用于扫描场景的最新成果。他表示,AIGC给手机扫描产品打开了创新空间,搭载大模型技术的夸克扫描王对识别手写字体、复杂公式和版式理解上的准确率达到了新高度。(夸克视觉技术负责人:黄锐华)经过几十年的发展,扫描技术已

【从入门到起飞】JavaSE—方法引用

🎊专栏【JavaSE】🍔喜欢的诗句:更喜岷山千里雪三军过后尽开颜。🎆音乐分享【Thetruththatyouleave】🥰欢迎并且感谢大家指出我的问题文章目录🍔概述🍔注意🎈如何确定是否是函数式接口🍔示例🎄方法引用的分类🏳️‍🌈引用静态方法🏳️‍🌈引用成员方法🛸注意🏳️‍🌈引用构造方法🛸

python脚本(渗透测试)

python爬取edusrc通过此脚本,可以爬取edusrc的目标信息,生成目标字典,为下一步开发自动化测试工具做准备importqueueimportthreadingimporttimeimportrequestsfrombs4importBeautifulSoupimportredefget_edu_name()

NLP任务评价指标(BLEU,METOR,ROUGH,CIDEr)

BLEU,METEOR,ROUGE一般在机器翻译里用,CIDEr一般在图像字幕生成里用BLEU所谓BLEU,最开始是用于机器翻译中。他的思想其实很native,对于一个给定的句子,有标准译文S1,还有一个神经网络翻译的句子S2。BLEU的思想就是对于出现机器翻译S2的所有短语,看有多少个短语出现在S1中,然后算一下这个

Flink

flink应用场景maven依赖<properties><flink.version>1.17.0</flink.version></properties><dependencies><dependency><groupId>org.apache.flink</groupId><artifactId>flink-str

react 通过ref 获取对应 dom 的位置信息

需求:在点击某个dom元素的时候滚动条要同步滚动进程:获取ref打印,打印出来是一个dom元素,看不到有什么方法查找dom属性信息找到了两个参数,offsetLeft:返回元素的水平偏移位置。offsetTop:返回元素的垂直偏移位置。这两个参数都是基于父节点的,可以直接使用this.cellMainBox.curre

OceanMind海睿思入选弯弓研究院《2023中国营销技术生态图谱8.0》

近日,由国内MarTech领域知名机构弯弓研究院主办的第五届营销数字化大会暨营销科技MarTech交易展在广州成功召开。本次大会发布了《2023中国营销技术生态图谱8.0版》(以下简称“弯弓图谱8.0”),中新赛克海睿思凭借成熟的技术实力成功入选弯弓图谱8.0的中台板块,成为数据与分析领域本土优秀代表服务商之一。随着企

热文推荐