Название: Неправильно открывается окно
Отправлено: mehannik26 от Июнь 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
Название: Re: Неправильно открывается окно
Отправлено: PimenS от Июнь 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,"Внимание", "Неверный логин и пароль"); }
|