多窗口联系

news2024/9/22 13:31:14

使用信号和槽实现多个界面的跳转

准备好两个界面

一个界面准备好信号

一个界面准备好槽

连接两个界面的信号和槽

主界面的头文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

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

private:
    Ui::Widget *ui;
signals:
    void my_signals();   //一个界面准备好信号
private slots:
    void on_login_clicked();
};
#endif // WIDGET_H

主界面的源文件

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

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

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


void Widget::on_login_clicked()
{
    this->close();
    emit my_signals();
}

第二个界面的头文件

#ifndef SECOND_H
#define SECOND_H

#include <QWidget>

namespace Ui {
class Second;
}

class Second : public QWidget
{
    Q_OBJECT

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

private:
    Ui::Second *ui;
public slots:
    void my_slots();
};

#endif // SECOND_H

第二个界面的源文件

#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_slots()
{
    this->show();
}

主函数文件

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

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //实例化两个界面
    Widget w;
    Second s;
    //连接两个界面
    QObject::connect(&w,&Widget::my_signals,&s,&Second::my_slots);

    w.show();
    return a.exec();
}

qss登录界面升级优化

概念

Qss是Qt程序界面中用来设置控件的背景图片、大小、字体颜色、字体类型、按钮状态变化等属性,它是用来美化UI界面。实现界面和程序的分离,快速切换界面。

优点:实现简单、便捷

语法:

主要函数:

    //去掉头部
    this->setWindowFlag(Qt::FramelessWindowHint);
    //去掉窗口的空白部分
    this->setAttribute(Qt::WA_TranslucentBackground);

对话框

消息对话框,字体对话框,颜色对话框,文件对话框

消息对话框QMessageBox

消息对话框给用户提供了一种交互式的弹窗,提供两种实现版本,分别是基于属性版本,基于静态成员函数版本

消息对话框有四种:警告对话框,错误对话框,问题对话框,信息对话框

基于属性版本

1.需要用消息对话框类实例化一个对象
2.用该对象调用内部成员函数,进行相关设置
3.需要调用exec()弹出对话框
4.根据exec()


无参构造:
  QMessageBox msgBox;
  msgBox.setText("The document has been modified.");
  msgBox.setInformativeText("Do you want to save your changes?");
  msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
  msgBox.setDefaultButton(QMessageBox::Save);
  int ret = msgBox.exec();
  
有参构造:
QMessageBox::QMessageBox( //函数名
    QMessageBox::Icon icon,  //图标
    const QString &title, //对话框的标题
    const QString &text, //对话框的文本
    QMessageBox::StandardButtons buttons = NoButton, //对话框提供的按钮
    QWidget *parent = nullptr, //指定父组件
    )

参数一:
QMessageBox::NoIcon  //无图标
QMessageBox::Question //问题
QMessageBox::Information //信息
QMessageBox::Warning //警告
QMessageBox::Critical //错误

参数三:
QMessageBox::Ok  //ok
QMessageBox::Open //打开
QMessageBox::Save //保存
QMessageBox::Cancel //取消
QMessageBox::Close //关闭
QMessageBox::Discard //不保存
QMessageBox::Apply //应用

练习

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

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

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

结果

登录界面头文件

#ifndef LOGIN_H
#define LOGIN_H

#include <QWidget>
#include <QMovie>
#include <QPushButton>
#include <QDebug>
#include <QString>
#include <QMessageBox>

QT_BEGIN_NAMESPACE
namespace Ui { class login; }
QT_END_NAMESPACE

class login : public QWidget
{
    Q_OBJECT

public:
    login(QWidget *parent = nullptr);
    ~login();
signals:
    void my_signals();

private slots:
    void on_login_2_clicked();

    void on_cancel_clicked();

private:
    Ui::login *ui;
};
#endif // LOGIN_H

登录界面源文件

#include "login.h"
#include "ui_login.h"

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

    QMovie *mv = new QMovie(":/pictrue/qq2.gif");
    ui->login_label->setMovie(mv);
    mv->start();
    ui->login_label->setScaledContents(true);  //使图片自适应标签

    ui->user_label->setPixmap(QPixmap(":/pictrue/qq.png"));
    ui->user_label->setScaledContents(true);  //使图片自适应标签

    ui->password_label->setPixmap(QPixmap(":/pictrue/passwd.jpg"));
    ui->password_label->setScaledContents(true);  //使图片自适应标签
    ui->password_Edit->setEchoMode(QLineEdit::Password);
}

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


void login::on_login_2_clicked()
{
    QString user,password;
    user = ui->user_Edit->text();
    password = ui->password_Edit->text();
    if(user == "admin" && password == "12345678")
    {
        //弹出一个消息对话框QMessageBox 基于属性版本
        QMessageBox msg(QMessageBox::Information,
                        "登录",
                        "登录成功",
                        QMessageBox::Ok,
                        this
                        );
        int ret = msg.exec();
        if(ret == QMessageBox::Ok)
        {
            emit my_signals();
            this->close();
        }
    }
    else
    {
        //弹出一个警告对话框QMessageBox 基于属性版本
        QMessageBox msg(QMessageBox::Warning,
                        "登录失败",
                        "账号和密码不匹配,是否重新登录",
                        QMessageBox::Yes | QMessageBox::No,
                        this
                        );
        int ret = msg.exec();
        if(ret == QMessageBox::Yes)
        {
            ui->user_Edit->clear();
            ui->password_Edit->clear();
        }
        else
        {
            this->close();
        }
    }

}

void login::on_cancel_clicked()
{
    //弹出一个问题对话框QMessageBox 基于属性版本
    QMessageBox msg(QMessageBox::Question,
                    "确认",
                    "您是否确定要退出登录?",
                    QMessageBox::Yes | QMessageBox::No,
                    this
                    );
    int ret = msg.exec();
    if(ret == QMessageBox::Yes)
    {
        this->close();
    }
    else
    {
        msg.close();
    }
}

第二界面头文件

#ifndef SECOND_H
#define SECOND_H

#include <QWidget>

namespace Ui {
class Second;
}

class Second : public QWidget
{
    Q_OBJECT

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

private:
    Ui::Second *ui;

public slots:
    void my_slots();
};

#endif // SECOND_H

第二界面源文件

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

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

    //去掉头部
    this->setWindowFlag(Qt::FramelessWindowHint);
    //去掉窗口的空白部分
    this->setAttribute(Qt::WA_TranslucentBackground);
}

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

void Second::my_slots()
{
    this->show();
}

主函数文件

#include "login.h"
#include "second.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    login w;
    Second s;
    QObject::connect(&w,&login::my_signals,&s,&Second::my_slots);

    w.show();
    return a.exec();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2122574.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

俄罗斯电商没有技巧,OZON换季相关爆品

Top1 加热器 Обогреватель кварцевый напольный ИЖЭКО М 800 вт СВ01 энергосберегающий электрообогреватель 商品id&#xff1a;1352359815 月销量&#xff1a;781 OZON选品分析工具&#…

Xilinx系FPGA学习笔记(六)RAM的IP核学习

系列文章目录 文章目录 系列文章目录块RAM生成 块RAM生成 对于RAM来说&#xff0c;也有两种: 在 Memories & Storage Elements 下&#xff0c;一个是 Distributed Memory Generator&#xff0c;另一个是 BlockMemory Generator&#xff0c;这与ROM是类似的 这里的常规接口…

CSP-CCF★★★201812-2小明放学★★★

目录 一、问题描述 二、解答 &#xff08;1&#xff09;注意&#xff1a; &#xff08;2&#xff09;80分版&#xff1a; &#xff08;3&#xff09;100分版&#xff1a; 三、总结 一、问题描述 二、解答 &#xff08;1&#xff09;注意&#xff1a; 题目的n小于等于10的…

9月10(信息差)

&#x1f30d;华为最便宜小折叠&#xff01;华为nova Flip今晚发布&#xff1a;搭载麒麟8000芯片 从曝光的跑分信息来看&#xff0c;nova Flip将搭载麒麟8000处理器&#xff0c;也就是nova 12 Pro/Ultra的同款&#xff0c;采用8核心的134组合&#xff0c;大核是1颗2.4GHz的Cort…

怎么画实体关系图E-R?用这款在线绘图工具简单又好用!

ER图(Entity-Relationship Diagram&#xff0c;即实体-关系图)是一种用于数据库设计的图形化工具&#xff0c;用于描述现实世界的概念模型。它由Peter Chen于1976年首次提出&#xff0c;现已成为数据库建模和系统分析设计中最常用的工具之一。 ER图通过图形化的方式&#xff0…

Mamba模型学习笔记

笔记来源&#xff1a;bilibili Transformer 的死穴 Transformer 结构的核心是自注意力机制层&#xff0c;无论是 encoder 还是 decoder&#xff0c;序列数据都先经过位置编码后喂给这个模块。 但是自注意力机制的计算范围仅限于窗口内&#xff0c;而无法直接处理窗口外的元素…

支持iPhone 16新品预售,饿了么同步上线专人配送等特色服务

9月10日凌晨&#xff0c;2024年 Apple 秋季新品发布会上正式揭晓iPhone 16新机。9月10日一早&#xff0c;饿了么同步宣布&#xff1a;今年将携手近4000家Apple 授权专营店&#xff0c;支持iPhone 16新品预售及现货的同步开售。新机现货首发当日&#xff0c;饿了么消费者最快半小…

Mysql | 知识 | 事务隔离级别

转账案例缘起 我的钱包&#xff0c;共有 100 元。 今天我心情好&#xff0c;我决定给你的转账99元&#xff0c;最后的结果肯定是我的余额变为 1元&#xff0c;你的余额多了99元。 转账这一动作在程序里会涉及到一系列的操作&#xff0c;假设我向你转账 99元 的过程是有下面这…

哪些原因导致ERP成功率这么低?

哪些原因导致ERP成功率这么低&#xff1f; 有一句名言是“幸福的家庭都是相似的&#xff0c;不幸的家庭却各有各的不幸。”&#xff0c;这句名言应用到企业数字化的实施落地中也是适用的&#xff0c;数字化成功实施的企业也都是相似的&#xff0c;数字化实施失败的企业却有各种…

安卓玩机工具-----适合安卓机型的“搞机工具箱” 功能齐全 玩机推荐

搞机工具箱最新版是一款相当出色的电脑端手机工具箱软件&#xff0c;搞机工具箱正式版功能强劲&#xff0c;可以帮助用户不需要root就能够直接对手机进行调节&#xff0c;方便对手机进行更加全面的掌控&#xff0c;搞机工具箱便捷好用&#xff0c;只需要根据文字提示及自己的需…

开源的 Windows 12 网页体验版!精美的 UI 设计、丰富流畅的动画

大家周二好呀&#xff01;博主今天给小伙伴们分享一款炫酷的 Windows 12 体验版&#xff0c;网页效果拉满&#xff0c;非常值得我们去尝试&#xff01; 如果你对未来的Windows操作系统充满期待&#xff0c;那么这款开源的Windows 12 网页体验版绝对不容错过&#xff01;这不仅…

如何编辑pdf文件?金舟PDF编辑器解决PDF编辑、转换问题!

如何编辑pdf文件&#xff1f;pdf是电脑上便携的文档格式之一&#xff0c;不管是阅读&#xff0c;还是打印&#xff0c;都不会出现排版错乱的问题&#xff0c;并且在任意系统上都能“正常”展示&#xff0c;不受影响。这也是pdf文件运用较为广泛的原因之一。 不少用户在接触到pd…

【数据结构与算法 | 灵神题单 | 前后指针(链表)篇】力扣19, 61,1721

1. 力扣19&#xff1a;删除链表的倒数第N个节点 1.1 题目&#xff1a; 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5]示例 2&#xff1a; …

cache miss问题C++示例

原题是&#xff1a; const int LEN 64*1024*1024; int *arr new int[LEN]; for (int i 0; i < LEN; i 2) arr[i] * i; // 循环1 for (int i 0; i < LEN; i 8) arr[i] * i; // 循环2第二个循环比第一个循环少了四倍的计算量&#xff0c;理论上应该要快4倍&#xff…

深度解析RAG:你必须要了解的RAG优化方法

RAG&#xff08;Retrieval-Augmented Generation&#xff09;是一种结合检索和生成能力的技术框架&#xff0c;旨在通过从外部知识库中检索相关信息来增强生成模型的输出。其基本思想是利用大型语言模型&#xff08;LLM&#xff09;的生成能力&#xff0c;同时通过检索机制获取…

OpenStack × OceanBase: 打造高可用可扩展的基础设施平台

OceanBase 社区资深总监封仲淹在9月3日参加 OpenInfra 亚洲峰会中&#xff0c;分享了OceanBase与OpenStack的联合解决方案。本文将介绍这一联合方案的技术亮点及其为用户带来的独特价值。 OpenStack长期以来一直是云计算领域的先行者&#xff0c;通过提供强大的开源平台&#x…

西门子博途零基础学PLC必会的100个指令

#西门子##PLC##自动化##工业自动化##编程##电工##西门子PLC##工业##制造业##数字化##电气##工程师# 工控人加入PLC工业自动化精英社群 工控人加入PLC工业自动化精英社群

MATLAB求解0-1线性规划问题的详细分析

引言 0-1线性规划是整数规划中的一种特殊形式&#xff0c;它广泛应用于资源分配、工厂选址、投资组合优化、物流运输等多个领域。0-1线性规划的特点是&#xff0c;决策变量只能取0或1的离散值&#xff0c;通常用于描述“是-否”决策问题。随着计算机技术的发展&#xff0c;数学…

红日靶机(一) 笔记

红日靶机(一)笔记 概述 域渗透靶机&#xff0c;可以练习对域渗透的一些知识&#xff0c;主要还是要熟悉 powershell 语法&#xff0c;powershell 往往比 cmd 的命令行更加强大&#xff0c;而很多渗透开源的脚本都是 powershell 的。例如 NiShang&#xff0c;PowerView 等等。…

料品档案没有配置主供应商信息

这个问题经常会出现在普通用户的面前。没有合适的工程人员去打理料品档案。信息是缺漏的。用友给出来的提示&#xff0c;也让人摸不着头脑。只能是记下来备用吧。