homework8/19

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

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

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

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

widget.cpp

//消息对话框
#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_warBtn_clicked()
{
    //弹出警告对话框   基于属性版本
    QMessageBox msg(QMessageBox::Warning, //图标
                    "警告", //标题
                    "不要再犯困了,否则。。", //文本
                    QMessageBox::Yes | QMessageBox::No, //提供按钮
                    this //指定父组件
                    );
    //调用exec() 弹出对话框
    int ret = msg.exec();

    //根据用户的选择,执行不同的功能
    if(ret == QMessageBox::Yes)
    {
        qDebug() << "好的好的 我已经清醒了";
    }
    else
    {
        qDebug() << "我就要睡,。。";
    }
}

void Widget::on_inforBtn_clicked()
{
    //弹出一个信息对话框  基于静态成员函数实现
    int ret = QMessageBox::information(this,  //父组件
                             "信息", //标题
                             "晚上我请你吃饭", //文本
                             QMessageBox::Yes | QMessageBox::No  //按钮
                             );
    //根据用户的选择,执行不同的功能
    if(ret == QMessageBox::Yes)
    {
        qDebug() << "好的,我要吃。。。" ;
    }
    else
    {
        qDebug() << "我有约了,你自己吃吧";
    }
}



void Widget::on_pushButton_clicked()
{
    bool ok;

    QFont f = QFontDialog::getFont(&ok,QFont("宋体",10,1),this,"字体"
                );
   // ui->plainTextEdit->setFont(f);
    ui->textEdit->setCurrentFont(f);
}

void Widget::on_loginBtn_clicked()
{
    // 获取输入的用户名和密码
    QString username = ui->usernameLineEdit->text();
    QString password = ui->passwordLineEdit->text();

    // 假设正确的用户名和密码
    const QString correctUsername = "zhang";
    const QString correctPassword = "123456";

    // 验证用户名和密码
    if (username == correctUsername && password == correctPassword)
    {
        // 如果正确,显示成功信息
        QMessageBox::information(this, "Login", "登录成功", QMessageBox::Ok);
        // 用户点击Ok后,关闭登录界面,跳转到其他界面的逻辑
        this->close(); //第一个界面关闭
        emit my_jump(); //触发第一个界面的信号
        // 这里仅示例性地关闭当前窗口
        close();
    }
    else
    {
        // 如果不正确,显示错误信息
        int ret = QMessageBox::critical(this, "Login Error", "账号和密码不匹配,是否重新登录?", QMessageBox::Yes | QMessageBox::No);
        if (ret == QMessageBox::Yes)
        {
            // 清除密码框中的内容,允许用户重新输入
            ui->passwordLineEdit->clear();
        }
        else
        {
            // 如果选择No,关闭登录界面
            close();
        }
    }
}

void Widget::on_pushButton_2_clicked()
{
    // 如果用户点击取消按钮,弹出问题对话框询问是否退出
    int ret = QMessageBox::question(this, "Exit Login", "您是否确定要退出登录?", QMessageBox::Yes | QMessageBox::No);
    if (ret == QMessageBox::Yes)
    {
        // 用户点击Yes,关闭登录界面
        close();
    }
}

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QFontDialog>
#include <QMessageBox>
#include <QDebug>
#include <QFont>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

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

private slots:
    void on_warBtn_clicked();

    void on_inforBtn_clicked();

    void on_pushButton_clicked();

    void on_loginBtn_clicked();

    void on_pushButton_2_clicked();

signals:
    void my_jump(); //第一个界面准备的信号

private:
    Ui::Widget *ui;
};


#endif // WIDGET_H

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;
}

//第一个界面my_jump信号对应的槽函数
void second::jump_slot()
{
    this->show(); //显示
}

second.h

#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();

public slots:
    void jump_slot(); //第二个界面准备的槽函数声明

private:
    Ui::second *ui;
};

#endif // SECOND_H

main.cpp

完善对话框,点击登录对话框,如果账号和密码匹配,则弹出信息对话框,给出提示”登录成功“,提供一个Ok按钮,用户点击Ok后,关闭登录界面,跳转到其他界面
//如果账号和密码不匹配,弹出错误对话框,给出信息”账号和密码不匹配,是否重新登录“,并提供两个按钮Yes|No,用户点击Yes后,清除密码框中的内容,继续让用户进行登录,如果用户点击No按钮,则直接关闭登录界面
//如果用户点击取消按钮,则弹出一个问题对话框,给出信息”您是否确定要退出登录?“,并给出两个按钮Yes|No,用户迪纳基Yes后,关闭登录界面,用户点击No后,关闭对话框,继续执行登录功能
//要求:基于属性版和基于静态成员函数版至少各用一个
#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_jump, &s, &second::jump_slot);
    w.show();
    return a.exec();
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: rmdir -p homework/work1 和 rm -rf homework/work1 是 Linux 中的两条命令,主要用于删除文件夹。 rmdir -p 指令是用来递归删除文件夹的,也就是说如果要删除的文件夹不为空,rmdir -p 就会删除该文件夹下的所有文件夹和文件,直到该文件夹为空为止。例如,如果要删除 homework/work1 这个文件夹,rmdir -p 会先删除 homework/work1 中的所有文件和文件夹,最后再删除 homework/work1 这个文件夹。 rm -rf 指令是用来强制删除文件夹的,它不会询问用户确认,而是直接删除该文件夹下的所有文件和文件夹,包括该文件夹本身。例如,如果要删除 homework/work1 这个文件夹,rm -rf 就会直接删除该文件夹以及该文件夹下的所有文件和文件夹,不会给出任何提示或确认。 综上所述,rmdir -p 和 rm -rf 都是用于删除文件夹的命令,但 rmdir -p 是递归删除文件夹,rm -rf 是强制删除文件夹。因此,使用时应该根据需求选择相应的命令。 ### 回答2: 这两条指令分别是rmdir -p homework/work1和rm -rf homework/work1。 首先,它们的相同之处是它们都是用来删除指定目录下的文件或文件夹。在这里,它们都是针对homework目录下的work1文件夹进行删除操作。 然而,它们也存在一些异同之处。 异同之一是它们的操作方式不同。rmdir -p是将homework文件夹下的work1文件夹进行删除,如果work1文件夹中还存在其他文件或文件夹,则会报错,无法删除。而rm -rf则是强制递归删除homework文件夹下的work1文件夹,无论其中是否还存在其他文件或文件夹,都会被删除。 另一个异同之处在于对于符号链接的处理。rmdir -p在遇到符号链接时不会删除它们,而rm -rf则会删除符号链接指向的原始文件或文件夹。 此外,使用这两条指令时也需要注意的是,rmdir -p要求在删除过程中要从上至下一级一级删除,如果中间某一级出现问题,则无法继续删除。而rm -rf则会直接删除整个指定的文件夹,无论其中是否包含内容。 总结起来,两条指令都是删除指定目录下的文件或文件夹,但是rmdir -p相对安全,不会删除包含其他文件或文件夹的目录,而rm -rf则是强制删除整个指定的目录,包括其中的所有内容。 ### 回答3: 这两条指令分别是 rmdir -p homework/work1 和 rm -rf homework/work1。 异同点如下: 1. 功能:rmdir -p homework/work1 用于删除指定的文件夹以及其父文件夹,而 rm -rf homework/work1 用于递归地删除指定文件夹及其内部的所有文件和子文件夹。 2. 安全性:rmdir -p 指令相对来说更加安全,因为它只会删除指定的文件夹以及其父文件夹,且只在被删除的目录为空时生效。而 rm -rf 指令则会递归地删除整个指定文件夹内的所有内容,并且不进行任何确认操作,因此需要谨慎使用,以免误删重要文件。 3. 使用范围:rmdir -p 只能用于删除文件夹,而不能用于删除文件。rm -rf 则既可用于删除文件夹,也可用于删除文件,执行范围更广。 4. 删除效果:rmdir -p 在删除过程中会逐级删除文件夹,如果有子文件夹或文件无法删除,则整个删除操作会中止。rm -rf 则会忽略删除中的错误,继续删除其他文件和文件夹。 5. 提示信息:rmdir -p 删除文件夹时会提示用户确认删除,而 rm -rf 删除文件夹和文件时不会给出任何提示信息。 总结来说,rmdir -p 用于相对安全地逐级删除文件夹及其父文件夹,而 rm -rf 则用于递归地删除整个文件夹及其内容,操作风险更大。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值