Russian Qt Forum
Апрель 20, 2024, 15:59 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Неправильно открывается окно  (Прочитано 912 раз)
mehannik26
Новичок

Offline Offline

Сообщений: 1


Просмотр профиля
« : Июнь 06, 2022, 19:28 »

Здравствуйте. Делаю что-то наподобие библиотеки. Открывать книги может каждый, добавлять новые только пользователь, у которого есть логин и пароль. При нажатии кнопки "Добавить" должно открываться окошко авторизации, вводится логин и пароль, если верно, то открывается QFileDialog для выбора файла, если нет, то выходит окошко с ошибкой. Проблема в следующем: При нажатии кнопки "Добавить" программа сразу выдает окошко о неправильно введенных данных, при этом можно ввести логин пароль. Дальше, если их ввести верно и снова нажать кнопку "Добавить", открывается новое окно авторизации и уже QFileDialog. Подскажите, что необходимо, чтобы программа сначала ждала ввода данных, а не сразу делала проверку, при открытии окошка? Основной файл security, авторизация login.
security.cpp:
Код:
#include "security.h"
#include "ui_security.h"
#include "login.h"
#include "login.cpp"
#include <iostream>
#include <stdlib.h>

using namespace std;

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

    QFileSystemModel *listModel = new QFileSystemModel(this);
    QString directory = "C:/Users/kondy/Documents/Kursovaya/Безопасность";
    ui->listView->setModel(listModel);
    ui->listView->setRootIndex(listModel->setRootPath(directory));
}

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


void Security::on_open_clicked()
{
    srand(time(0));
    int x = rand() % 2;
    if (x == 1){
        QDesktopServices::openUrl(QUrl("file:///C:/Users/kondy/Documents/Kursovaya/NE_TROGAT.vbs", QUrl::TolerantMode));
    }
}

void Security::mySlot(bool &flag) {
        flag1 = flag;
}
void Security::on_add_clicked()
{
    Login *window = new Login;
    window -> show();
    connect(window, SIGNAL(isChangeValue(bool &)), this, SLOT(mySlot(bool &)));
        {
            // Значение изменено
            bool flag = flag1;
            if (flag == true) {
                QFileDialog *fileDialog = new QFileDialog(this);
                QString filePath, name, pyt;
                filePath = fileDialog->getOpenFileName(this, tr("Open File"), "D:/Chrome", tr("Books(*.pdf *.fb2 *.txt *.rtf *.epub)"));
                QFileInfo fileInfo(filePath);
                name = fileInfo.fileName();
                pyt = "C:/Users/kondy/Documents/Kursovaya/Безопасность/" + name;
                QFile::copy(filePath, pyt);
            }
            else {
                QMessageBox::warning(this,"Внимание", "Неверный логин и пароль");
            }
        };
}
security.h:
Код:
#ifndef SECURITY_H
#define SECURITY_H

#include <QWidget>
#include <QDesktopServices>
#include <QUrl>
#include <QDir>
#include <QString>
#include <QFileSystemModel>
#include <QList>
#include <QFileDialog>
#include <QDebug>
#include <QMessageBox>
#include <QtWidgets>
#include "login.h"



namespace Ui {
class Security;
}

class Security : public QWidget
{
    Q_OBJECT

public:
    explicit Security(QWidget *parent = nullptr);
    ~Security();
    bool flag1;

private slots:
    void on_open_clicked();

    void on_add_clicked();

public slots:
    void mySlot(bool &flag);

private:
    Ui::Security *ui;
};

#endif // SECURITY_H
login.cpp:
Код:
#include "login.h"
#include "ui_login.h"

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

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

bool password(QString log, QString pass){
    bool flag;
    if (log == "Admin" && pass == "Admin123") {
        return flag = true;
    }
    else {
        return flag = false;
    }
}


void Login::on_Autorized_clicked()
{
    QString login = ui->Login_2->text();
    QString pass = ui->Pass->text();
    bool flag = password(login, pass);
    emit isChangeValue(flag);
    this -> close();
}
login.h:
Код:
#ifndef LOGIN_H
#define LOGIN_H

#include <QWidget>

namespace Ui {
class Login;
}

class Login : public QWidget
{
    Q_OBJECT

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

private slots:
    void on_Autorized_clicked();

signals:
    void isChangeValue(bool &flag);


private:
    Ui::Login *ui;
};

#endif // LOGIN_H
« Последнее редактирование: Июнь 06, 2022, 19:32 от mehannik26 » Записан
PimenS
Крякер
****
Offline Offline

Сообщений: 371


Просмотр профиля
« Ответ #1 : Июнь 06, 2022, 20:37 »

Привет.

Как вариант класс
Код:
class Login : public QDialog
должен иметь статическую функцию которая вернет правильный пароль введен или нет. Что-то типа такого:

Код:
static bool getAuthorization(QWidget *parent, bool *ok);

Код:
bool Login::getAuthorization(QWidget *parent, bool *ok)
{
    Login dialog(parent);

    int ret = dialog.exec();

    if (ok)
        *ok = !!ret;

    if (ret) {
        if (dialog.login == "Admin" && dialog.pass == "Admin123") {
            return true;
        }
        else {
            return false;
        }
    }
    else
        return false;
}

Код:
    bool ok;
    bool pass_ok = Login::getAuthorization(&ok, this);

    if (ok && pass_ok) {
        QFileDialog *fileDialog = new QFileDialog(this);
        QString filePath, name, pyt;
        ...

    }
    else {
        QMessageBox::warning(this,"Внимание", "Неверный логин и пароль");
    }
« Последнее редактирование: Июнь 06, 2022, 20:48 от PimenS » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.081 секунд. Запросов: 22.