QT Day2

2023-09-18 21:05:49

Second.h

#ifndef SECOND_H
#define SECOND_H

#include <QWidget>

namespace Ui {
class Second;
}

class Second : public QWidget
{
    Q_OBJECT

public slots:
    void jump_slot();    //接收跳转信号的槽函数
public:
    explicit Second(QWidget *parent = nullptr);
    ~Second();

private:
    Ui::Second *ui;
};

#endif // SECOND_H

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include<QPushButton>
#include<QLineEdit>
#include<QLabel>
#include<QFont>
#include<QMessageBox>
#include<QDebug>
#include"second.h"

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

signals:                    //该权限下定义属于自己的信号
    void my_signal();           //自定义一个无参无返回值的信号函数
    void jump();    //自定义跳转的信号函数;

private slots:
    void my_slot();                //自定义无参无返回值的槽函数
    void my_slot1();
public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private:
    Ui::Widget *ui;
    QLabel* lab1;
    QLabel* lab2;
    QLabel* lab3;
    QLineEdit* edit1;
    QLineEdit* edit2;
    QPushButton *btn1;
    QPushButton *btn2;
    void on_quesBtn_clicked();
    void on_critBtn_clicked();
    void on_infoBtn_clicked();
};
#endif // WIDGET_H

main.cpp

#include "widget.h"
#include"second.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    Second s;    //定义第二个界面
    QObject::connect(&w,&Widget::jump,&s,&Second::jump_slot);
    return a.exec();
}

second.cpp

#include "second.h"
#include "ui_second.h"

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

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

//接收跳转信号对应的槽函数
void Second::jump_slot()
{
    this->show();   //
}

widget.cpp

#include "widget.h"
#include "ui_widget.h"

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

    this->setFixedSize(800,600);     //设置固定尺寸
    this->setWindowTitle("Widget");     //设置窗口标题
    this->setWindowIcon(QIcon(":/wodepeizhenshi.png"));    //设置窗口图标

    //实例化标签
    lab1=new QLabel(this);
    lab1->setPixmap(QPixmap("D:\\qt23062\\day8\\logo.png"));     //设置图片
    lab1->setScaledContents(true);     //设置图片自动适应大小
    lab1->resize(800,270);           //重新设置尺寸
    //标签2
    lab2=new QLabel(this);
    lab2->setPixmap(QPixmap(":/userName.jpg"));     //设置图片
    lab2->setScaledContents(true);     //设置图片自动适应大小
    lab2->resize(60,60);           //重新设置尺寸
    lab2->move(200,300);

    //标签3
    lab3=new QLabel(this);
    lab3->setPixmap(QPixmap(":/passwd.jpg"));     //设置图片
    lab3->setScaledContents(true);     //设置图片自动适应大小
    lab3->resize(60,60);           //重新设置尺寸
    lab3->move(lab2->x(),lab2->y()+90);

    //行编辑器
    edit1=new QLineEdit("",this);
    edit1->setPlaceholderText("账号");
    edit1->move(lab2->x()+75,lab2->y());
    edit1->resize(360,60);

    edit2=new QLineEdit("",this);
    edit2->setPlaceholderText("密码");
    edit2->move(lab3->x()+75,lab3->y());
    edit2->resize(360,60);
    edit2->setEchoMode(QLineEdit::Password);        //设置回显模式

    //按钮
    btn1=new QPushButton(QIcon(":/login.png"),"登录",this);
    btn1->move(edit2->x()+50,edit2->y()+100);
    btn1->resize(110,70);           //重新设置尺寸

    QFont font = btn1->font();
    font.setPointSize(16);  // 设置字体大小为16像素
    btn1->setFont(font);

    QPushButton *btn2=new QPushButton(QIcon(":/cancel.png"),"取消",this);
    btn2->move(btn1->x()+150,btn1->y());
    btn2->resize(110,70);           //重新设置尺寸

    QFont font1 = btn2->font();
    font1.setPointSize(16);  // 设置字体大小为16像素
    btn2->setFont(font1);

    connect(btn1, &QPushButton::clicked, this, &Widget::my_slot);
    connect(btn2, &QPushButton::clicked, this, &Widget::my_slot1);
    connect(this,&Widget::my_signal,this,&Widget::close);

}

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

//槽函数
void Widget::my_slot()
{
    if(edit1->text()=="admin"&&edit2->text()=="123456")
    {
        //信息对话框
        on_infoBtn_clicked();
    }else
    {
        //错误对话框
        on_critBtn_clicked();
    }
}

void Widget::my_slot1()
{
    //问题对话框
    on_quesBtn_clicked();
}

//问题对话框
void Widget::on_quesBtn_clicked()
{
    //1.调用构造函数实例化对象
    QMessageBox box(QMessageBox::Question,              //图标
                    "问题对话框",                              //对话框标题
                    "是否确定要退出登入",                            //对话框文本内容
                    QMessageBox::Yes|QMessageBox::No,       //提供的按钮
                    this);                              //父组件
    //box.setDetailedText("有上好的飞天茅台");    //提供详细文本内容
    //box.setDefaultButton(QMessageBox::No);    //将no设置成默认按钮

    //2.调用exec函数运行对话框
    int ret=box.exec();

    //3.对结果进行判断
    if(ret==QMessageBox::Yes)
    {
        emit my_signal();

    }else if(ret==QMessageBox::No)
    {

    }
}

//信息对话框
void Widget::on_infoBtn_clicked()
{
    //直接调用静态成员函数完成对话框的实现
    int ret=QMessageBox::information(this,              //父组件
                         "信息对话框",              //对话框标题
                         "登入成功",     //对话框文本内容
                         QMessageBox::Ok,          //对话框提供的按钮
                         QMessageBox::Ok);              //默认选中的按钮
    if (ret==QMessageBox::Ok)
    {
        emit my_signal();
        emit jump();
    }
}

//错误对话框
void Widget::on_critBtn_clicked()
{
    //1.调用构造函数实例化对象
    QMessageBox box(QMessageBox::Critical,              //图标
                    "错误对话框",                              //对话框标题
                    "账号密码不匹配,是否重新登入",                            //对话框文本内容
                    QMessageBox::Yes|QMessageBox::No,       //提供的按钮
                    this);                              //父组件
    //box.setDetailedText("账号密码不匹配,是否重新登入");    //提供详细文本内容
    //box.setDefaultButton(QMessageBox::No);    //将no设置成默认按钮
    box.setButtonText(QMessageBox::Yes,"OK");
    box.setButtonText(QMessageBox::No,"cancel");

    //2.调用exec函数运行对话框
    int ret=box.exec();

    //3.对结果进行判断
    if(ret==QMessageBox::Yes)
    {
        edit2->clear();

    }else if(ret==QMessageBox::No)
    {
        emit my_signal();
    }
}












更多推荐

最新医疗界AI资讯,远程评估帕金森病症状的AI工具问世

原创|文BFT机器人1、AI模型快速评估,自动生成评估报告罗切斯特大学研究人员开发的一种人工智能工具可以帮助帕金森病患者在几分钟内远程评估其症状的严重程度。《npj数字医学》杂志上的一项研究介绍了这种新工具,它能让用户在网络摄像头前通过敲击手指10次,以0-4的等级来评估运动性能。医生通常会让患者执行简单的运动任务,以

C# net core中的过滤器(Filter)使用及跳过过滤器

过滤器(Filters)是用于在ASP.NETCore应用程序中执行全局或局部的操作的组件。这些过滤器可以用于处理请求前、请求后、异常处理等不同的阶段。以下是.NET5中常用的一些过滤器类型:在ASP.NETCore中,过滤器是一种可以在特定的阶段处理请求的方法。它们在一个action方法执行之前或之后运行,可以用来处

yarn的资源优化的调整参数

yarn的资源优化的调整参数官网:https://hadoop.apache.org/docs/r3.3.6/hadoop-yarn/hadoop-yarn-common/yarn-default.xml没事多看官网哈yarn.nodemanager.resource.memory-mb:用于设置NodeManager

解释什么是分布式数据库,列举几种常见的分布式数据库系统

1、什么是敏感信息和隐私保护?解释隐私保护的技术手段。敏感信息和隐私保护是指在收集、存储和使用个人数据时,需要采取一系列措施来保护这些数据的安全和机密性,防止数据被未经授权的第三方访问、使用或泄露。这些措施包括加密、访问控制、数据脱敏、数据加密、隐私政策等。在隐私保护的技术手段方面,常用的技术包括加密和访问控制。加密技

mysql自动删除过期的binlog

一、binlog_expire_logs_seconds配置项mysql8.0使用配置项binlog_expire_logs_seconds设置binlog过期时间,单位为秒。mysql旧版本使用配置项expire_logs_days设置binlog过期时间,单位为天,不方便测试。在8.0使用expire_logs_d

OPTEE Benchmark框架

安全之安全(security²)博客目录导读OPTEE调试技术汇总目录一、序言二、Benchmark框架三、Benchmark实现细节1、设计概况2、时间戳源3、调用时序图4、添加自定义时间戳5、构建并运行Benchmark6、限制和进一步措施一、序言本节中描述的特性依赖于上游不可用的Linuxkernelpatch,

conda手动下载虚拟环境中的包

一.下载导入tar安装包1.准备安装包安装包可从官网下载,或直接拷贝已有虚拟环境中的包【补充】关于虚拟环境中包的存储路径打开cmd,输入condaconfig--show查看pkgs_dirs属性的值C:\Users\XXX>condaconfig--showpkgs_dirs:-D:\program\anaconda

PostgreSQL 事务&并发&锁

文章目录PostgreSQL事务大家都知道的ACID事务的基本使用保存点PostgreSQL并发并发问题MVCCPostgreSQL锁机制表锁行锁总结PostgreSQL事务大家都知道的ACID在日常操作中,对于一组相关操作,通常要求要么都成功,要么都失败。在关系型数据库中,称这一组操作为事务。为了保证整体事务的安全性

软件设计模式系列之十二——外观模式

在软件设计中,经常会遇到需要与复杂子系统进行交互的情况。为了简化客户端与子系统之间的交互,提高系统的可维护性和可用性,外观模式应运而生。外观模式(FacadePattern)是一种结构型设计模式,它提供一个统一的界面,用于访问系统中的一组相关接口,从而隐藏了系统的复杂性。在本文中,我们将深入探讨外观模式,包括其定义、举

员工犯错,就应该受惩罚吗?

先说结论,惩罚肯定是不能有的。我们应该指导员工减少犯错的概率。在项目开发过程中,总会遇到项目成员犯错的场景。根据所犯错误是否具有共性特征,我把问题归为二类,不同类型的错误,采取不同的应对措施。第一类:有共性的问题。第二类:没有共性的问题。共性的定义:一个人多次或者多个人都犯过的错误。第一类:有共性的问题。对于有共性的问

vue3 - 使用reactive定义响应式数据进行赋值时,视图没有改变,值已经改变的解决方案

问题:在Vue3.0中我们使用reactive()定义的响应式数据的时候,当是一个数组或对象时,我们直接进行赋值,发现数据已经修改成功,但是页⾯并没有自动渲染成最新的数据;这是为什么呢?就如同官网所说的reactive存在一些局限性:(官方的描述)原因:原因就是reactive函数会返回一个Proxy包装的对象,所以当

热文推荐