2.22 Qt day3 多界面跳转+qss登录界面优化+发布软件+对话框

news/2024/7/24 2:39:30 标签: qt, 开发语言

思维导图:

完善对话框,点击登录对话框,如果账号和密码匹配,则弹出信息对话框,给出提示”登录成功“,提供一个Ok按钮,用户点击Ok后,关闭登录界面,跳转到其他界面

如果账号和密码不匹配,弹出错误对话框,给出信息”账号和密码不匹配,是否重新登录“,并提供两个按钮Yes|No,用户点击Yes后,清除密码框中的内容,继续让用户进行登录,如果用户点击No按钮,则直接关闭登录界面

如果用户点击取消按钮,则弹出一个问题对话框,给出信息”您是否确定要退出登录?“,并给出两个按钮Yes|No,用户迪纳基Yes后,关闭登录界面,用户点击No后,关闭对话框,继续执行登录功能

要求:基于属性版和基于静态成员函数版至少各用一个

widget.h:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include<QMessageBox>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

signals:
    void my_signal();
private slots:
    void on_logBtn_clicked();
    void clicked();
    void on_cancelBtn_clicked();

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

second.h:

#ifndef SECOND_H
#define SECOND_H

#include <QWidget>

namespace Ui {
class Second;
}

class Second : public QWidget
{
    Q_OBJECT

public slots:
    void my_slot();
public:
    explicit Second(QWidget *parent = nullptr);
    ~Second();

private:
    Ui::Second *ui;
};

#endif // SECOND_H

widget.cpp:

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

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    this->setWindowFlag(Qt::FramelessWindowHint);//去掉窗口标题
    this->setAttribute(Qt::WA_TranslucentBackground);//去掉空白
}

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


void Widget::on_logBtn_clicked()
{
    //获取行编辑器userNameEdit和passwdEdit的内容
    //并和账号admin、密码123456进行比对
    if(ui->userNameEdit->text()=="admin"&&ui->passwdEdit->text()=="123456")
    {
        //弹出消息对话框
        QMessageBox msg(QMessageBox::Information,//对话框图标
                        "提示",//对话框标题
                        "登录成功",//提示文本
                        QMessageBox::Yes,//提供的按钮
                        this);//
        //调用exec弹出对话框
        msg.exec();
        //跳转到第二个界面
        my_signal();
        //关闭窗口
        this->close();
    }
    else
    {
        //弹出消息对话框
        QMessageBox msg(QMessageBox::Critical,//对话框图标
                        "错误",//对话框标题
                        "账号和密码不匹配,是否重新登录",//提示文本
                        QMessageBox::Yes|QMessageBox::No,//提供的按钮
                        this);//指定父组件
        //调用exec弹出对话框
        int ret=msg.exec();
        //根据用户的选择 执行不同的功能
        if(ret==QMessageBox::Yes)
        {
            //清空行编辑器passwdEditd的内容
            ui->passwdEdit->clear();
        }
        else if(ret==QMessageBox::No)
        {
            //关闭窗口
            this->close();
        }
    }
}


void Widget::clicked()
{
    //触发信号
    emit this->my_signal();
}
//取消按钮槽函数
void Widget::on_cancelBtn_clicked()
{
    int ret = QMessageBox::question(//函数名
        this, //指定父组件
        "", //标题
       "您是否确定要退出登录?", //文本
         QMessageBox::Yes | QMessageBox::No//提供按钮
        );
    //判断用户选中的按钮
    if(ret == QMessageBox::Yes)
    {
       //关闭登录界面,
        this->close();
    }
}

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::my_slot()
{
    this->show();
}

widget.ui:

*{
	background-color: rgb(255, 255, 255);
}
QFrame#frame{
	border-image: url(:/Logo/shanChuan.jpg);border-radius:10px;
}
#frame_2{
	background-color: rgba(157, 157, 157, 120);border-radius:10px;
}
QLabel#label{
	background-color: rgba(94, 94, 94, 130);border-radius:10px;
}
#label_2{
	font: 18pt "等线";
	background:transparent;/*背景完全透明*/
	color: rgba(255, 255, 255, 120);
}
#label_3{
	font: 8pt "等线";
	background:transparent;/*背景完全透明*/
	color: rgba(255, 255, 255, 120);
}
QLineEdit{
	background:transparent;border:none;/*无边框*/
	border-bottom:1px solid rgba(255, 255, 255, 120);
	font: 16pt "仿宋";
	color: rgba(255, 255, 255, 120);
}
QPushButton{
	border-radius:10px;
	background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:1, stop:0 rgba(90, 120, 221, 255), stop:1 rgba(255, 255, 255, 255));
	font: 18pt "仿宋";
	color: rgba(255, 255, 255, 120);
}
QPushButton:hover{/*鼠标移动*/
	border-radius:10px;
	background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:1, stop:0 rgba(48, 120, 221, 255), stop:1 rgba(255, 255, 255, 255));
	font: 18pt "仿宋";
	color: rgba(255, 255, 255, 120);
}
QPushButton:pressed{/*鼠标按下*/
	border-radius:10px;
	background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:1, stop:0 rgba(90, 120, 221, 255), stop:1 rgba(255, 255, 255, 255));
	font: 18pt "仿宋";
	color: rgba(255, 255, 255, 120);
	padding-top:5px;
	padding-left:5px;
}

结果:

1.点击登录对话框,如果账号和密码匹配,则弹出信息对话框,给出提示”登录成功“,提供一个Ok按钮,用户点击Ok后,关闭登录界面,跳转到其他界面

2.如果账号和密码不匹配,弹出错误对话框,给出信息”账号和密码不匹配,是否重新登录“,并提供两个按钮Yes|No,用户点击Yes后,清除密码框中的内容,继续让用户进行登录,如果用户点击No按钮,则直接关闭登录界面

3.如果用户点击取消按钮,则弹出一个问题对话框,给出信息”您是否确定要退出登录?“,并给出两个按钮Yes|No,用户迪纳基Yes后,关闭登录界面,用户点击No后,关闭对话框,继续执行登录功能


http://www.niftyadmin.cn/n/5391644.html

相关文章

3.openEuler物理存储及逻辑卷管理(一):磁盘存储挂载与使用

openEuler OECA认证辅导,标红的文字为学习重点和考点。 如果需要做实验,建议下载麒麟信安、银河麒麟、统信等具有图形化的操作系统,其安装与openeuler基本一致。 磁盘大类: HDD, (Hard Disk Drive的缩写) : 由一个或者多个铝制或者玻璃制成的磁性碟 片,磁头,…

excel数据导入到数据库的方法

背景&#xff1a;最近在做和HW对接的某项目&#xff0c;需要将第三方接口提供的数据进行展示&#xff1b;在对方提供了详细的excel后&#xff0c;觉得也挺简单的就是将excel数据导入到数据库中。 方案一&#xff1a; 普通的初学者肯定会想&#xff0c;那我读取excel数据&…

快速清理_卸载docker_找到不用的进程_centos磁盘爆满_清理磁盘---Linux工作笔记071

查看大文件,并且按照大小排名 cd / | du -h |sort -hr|head -30 可以看到根据不用的结果进行删除 可以看到在/data/dict目录很大,里面的都可以删除 然后再去卸载docker,要不然,没有磁盘是卸载不了的 systemctl stop docker systemctl stop docker.socket yum remove docker-…

【Linux】部署单机项目(自动化启动)

目录 一.jdk安装 二.tomcat安装 三.MySQL安装 四.部署项目 一.jdk安装 1.上传jdk安装包 jdk-8u151-linux-x64.tar.gz 进入opt目录&#xff0c;将安装包拖进去 2.解压安装包 防止后面单个系列解压操作&#xff0c;我这边就直接将所有的要用的全部给解压&#xff0c;如下图注…

system_v

共享内存 创建共享内存 key_t ftok(const char *pathname, int proj_id);使用相同的pathname和proj_id可以得到相同的key_t pathname必须是一个存在的目录 int shmget(key_t key, size_t size, int shmflg);需要使用ftok获取key_t IPC_CREAT——不存在就创建&#xff0c…

【Elasticsearch专栏 12】深入探索:Elasticsearch使用索引生命周期管理(ILM)自动化删除旧数据

导言 在Elasticsearch中&#xff0c;随着数据的不断积累&#xff0c;管理旧数据成为了一个重要的问题。为了有效地管理这些数据&#xff0c;Elasticsearch提供了索引生命周期管理&#xff08;ILM&#xff09;功能。ILM允许根据索引的年龄、大小或其他条件自动执行一系列操作&a…

上一篇文章补充:已经存在的小文件合并

对于HDFS上已经存在的大量小文件问题&#xff0c;有多种策略可以进行处理和优化&#xff1a; 1. **合并小文件**&#xff1a; - **使用Spark作业合并**&#xff1a;通过编写Spark程序读取小文件并调用repartition()或coalesce()函数重新分区数据&#xff0c;然后将合并后的…

解决easyExcel模板填充时转义字符\{xxx\}失效

正常我们在使用easyExcel进行模板填充时&#xff0c;定义的变量会填充好对应的实际数据&#xff0c;未定义的变量会被清空&#xff0c;但是如果这个未定义的变量其实是模板的一部分&#xff0c;那么清空了就出错了。 在这张图里&#xff0c;上面的是模板填充后导出的文件&…