From 56ce2fe5982c7a9207dd31ee4931c382e5a4d1ed Mon Sep 17 00:00:00 2001 From: wanghaoyu <1580258873@qq.com> Date: Thu, 27 Feb 2025 16:51:14 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E6=96=B0=E5=A2=9E=E5=BA=94?= =?UTF-8?q?=E7=94=A8=E5=9C=BA=E6=99=AF=E5=88=86=E7=B1=BB=EF=BC=8C=E7=99=BB?= =?UTF-8?q?=E9=99=86=E9=A1=B5=E9=9D=A2=EF=BC=8C=E6=95=B0=E6=8D=AE=E5=BA=93?= =?UTF-8?q?=E5=A2=9E=E5=88=A0=E6=94=B9=E6=9F=A5=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PayloadAPP.pro | 3 + SDFPDlg.cpp | 43 +++ SDFPDlg.h | 11 + SDFPDlg.ui | 143 ++++++-- Src/GDDC/gddcSet.cpp | 4 + Src/UserManage/UserManage.pri | 13 + Src/UserManage/img/eyesOpen.png | Bin 0 -> 7673 bytes Src/UserManage/img/eyesOpen1.png | Bin 0 -> 8320 bytes Src/UserManage/mydatabase.cpp | 243 +++++++++++++ Src/UserManage/mydatabase.h | 51 +++ Src/UserManage/res.qrc | 6 + Src/UserManage/userlogin.cpp | 230 +++++++++++++ Src/UserManage/userlogin.h | 55 +++ Src/UserManage/userlogin.ui | 573 +++++++++++++++++++++++++++++++ mainwindow.cpp | 176 ++++++++-- mainwindow.h | 14 + mainwindow.qrc | 6 + mainwindow.ui | 328 ++++++++++-------- res/eye1.png | Bin 0 -> 7309 bytes res/eye2.png | Bin 0 -> 6720 bytes res/eye3.png | Bin 0 -> 6734 bytes res/eyec1.png | Bin 0 -> 5325 bytes res/eyesOpen.png | Bin 0 -> 7673 bytes res/eyesOpen1.png | Bin 0 -> 8320 bytes 24 files changed, 1701 insertions(+), 198 deletions(-) create mode 100644 Src/UserManage/UserManage.pri create mode 100644 Src/UserManage/img/eyesOpen.png create mode 100644 Src/UserManage/img/eyesOpen1.png create mode 100644 Src/UserManage/mydatabase.cpp create mode 100644 Src/UserManage/mydatabase.h create mode 100644 Src/UserManage/res.qrc create mode 100644 Src/UserManage/userlogin.cpp create mode 100644 Src/UserManage/userlogin.h create mode 100644 Src/UserManage/userlogin.ui create mode 100644 res/eye1.png create mode 100644 res/eye2.png create mode 100644 res/eye3.png create mode 100644 res/eyec1.png create mode 100644 res/eyesOpen.png create mode 100644 res/eyesOpen1.png diff --git a/PayloadAPP.pro b/PayloadAPP.pro index fa49862..0f06328 100644 --- a/PayloadAPP.pro +++ b/PayloadAPP.pro @@ -1,6 +1,7 @@ QT += core gui webenginewidgets QT += network QT += quickwidgets qml +QT += sql greaterThan(QT_MAJOR_VERSION, 4): QT += widgets CONFIG += c++17 @@ -59,6 +60,7 @@ INCLUDEPATH += $$PWD/3rdparty/ffmpeg/include \ $$PWD/Src/VideoGL/ \ $$PWD/Src/Video/ \ $$PWD/3rdparty/QNotify/include \ + $$PWD/Src/UserManage \ LIBS += -L$$PWD/3rdparty/ffmpeg/lib \ -lavcodec -lavdevice -lavfilter -lavformat -lavutil -lpostproc \ @@ -87,3 +89,4 @@ include($$PWD/Src/RescueLoad/RescueLoad.pri) include($$PWD/Src/GDDC/GDDC.pri) include($$PWD/Src/Video/Video.pri) include($$PWD/Src/VideoGL/VideoGL.pri) +include($$PWD/Src/UserManage/UserManage.pri) diff --git a/SDFPDlg.cpp b/SDFPDlg.cpp index c6a0a29..b4e993d 100644 --- a/SDFPDlg.cpp +++ b/SDFPDlg.cpp @@ -14,9 +14,52 @@ SDFPDlg::SDFPDlg(QWidget *parent) setWindowFlags(Qt::CustomizeWindowHint|Qt::FramelessWindowHint); hide(); ui->label_version->setText(g_SoftwareVersion); + initButton(); } SDFPDlg::~SDFPDlg() { delete ui; } + +void SDFPDlg::initButton() +{ + ui->loginButton->setStyleSheet("QPushButton {" + "border: none;" // 没有边框 + "color: #CFCFCF;" // 默认字体颜色为白色 + "font-size: 18px;" // 字体大小为 20 + "font-weight: bold;" + "background-color: transparent;" // 背景透明 + "font-family: 'STHeiti';" + "}" + + // 设置按钮悬停时的样式 + "QPushButton:hover {" + "color: #5289C1;" // 悬停时字体颜色变为橙色 + "}" + + // 设置按钮按下时的字体颜色 + "QPushButton:pressed {" + "color: #4A7DB0;" // 按下时字体颜色变为绿色 + "}" + + // 设置按钮选中时的样式 + "QPushButton:checked {" + "color: #5289C1;" // 选中时字体颜色变为绿色 + "}" + ); +} + +void SDFPDlg::resizeEvent(QResizeEvent *event) +{ + QWidget::resizeEvent(event); + // double weidgeteWidth = (double)(this->width()); + // // 设置按钮位置和大小 + // _loginBtn->move(weidgeteWidth - _loginBtn->width() - 20,20); +} + +void SDFPDlg::on_loginButton_clicked() +{ + emit clickLoginBtn(); +} + diff --git a/SDFPDlg.h b/SDFPDlg.h index c4b4cef..a3650ee 100644 --- a/SDFPDlg.h +++ b/SDFPDlg.h @@ -3,6 +3,7 @@ #include <QWidget> #include "global.h" +#include <QPushButton> namespace Ui { class SDFPDlg; @@ -18,6 +19,16 @@ public: private: Ui::SDFPDlg *ui; + void initButton(); + QPushButton* _loginBtn; +protected: + void resizeEvent(QResizeEvent *event) override; +private slots: + void on_loginButton_clicked(); + +signals: + void clickLoginBtn(); + }; #endif // SDFPDLG_H diff --git a/SDFPDlg.ui b/SDFPDlg.ui index d39cc04..a17c238 100644 --- a/SDFPDlg.ui +++ b/SDFPDlg.ui @@ -17,38 +17,8 @@ <string notr="true"/> </property> <layout class="QGridLayout" name="gridLayout"> - <item row="0" column="2"> - <widget class="QWidget" name="widget" native="true"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="styleSheet"> - <string notr="true">image: url(:/res/981csNew.png);</string> - </property> - </widget> - </item> - <item row="1" column="2"> - <layout class="QHBoxLayout" name="horizontalLayout"> - <item> - <widget class="QLabel" name="label_version"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string>版本号:V0.00.00</string> - </property> - </widget> - </item> - </layout> - </item> - <item row="0" column="3"> - <spacer name="horizontalSpacer_2"> + <item row="1" column="0"> + <spacer name="horizontalSpacer"> <property name="orientation"> <enum>Qt::Orientation::Horizontal</enum> </property> @@ -63,8 +33,8 @@ </property> </spacer> </item> - <item row="0" column="0"> - <spacer name="horizontalSpacer"> + <item row="1" column="2"> + <spacer name="horizontalSpacer_2"> <property name="orientation"> <enum>Qt::Orientation::Horizontal</enum> </property> @@ -79,6 +49,111 @@ </property> </spacer> </item> + <item row="1" column="1"> + <widget class="QWidget" name="widget" native="true"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="styleSheet"> + <string notr="true">image: url(:/res/981csNew.png);</string> + </property> + </widget> + </item> + <item row="0" column="0" colspan="3"> + <widget class="QWidget" name="widget_2" native="true"> + <property name="minimumSize"> + <size> + <width>0</width> + <height>20</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>16777215</width> + <height>40</height> + </size> + </property> + <layout class="QGridLayout" name="gridLayout_2"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <property name="spacing"> + <number>0</number> + </property> + <item row="0" column="0"> + <spacer name="horizontalSpacer_3"> + <property name="orientation"> + <enum>Qt::Orientation::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item row="0" column="2"> + <spacer name="horizontalSpacer_4"> + <property name="orientation"> + <enum>Qt::Orientation::Horizontal</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Policy::Fixed</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>30</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item row="0" column="1"> + <widget class="QPushButton" name="loginButton"> + <property name="maximumSize"> + <size> + <width>40</width> + <height>16777215</height> + </size> + </property> + <property name="text"> + <string>登录</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item row="3" column="0" colspan="3"> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QLabel" name="label_version"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>版本号:V0.00.00</string> + </property> + </widget> + </item> + </layout> + </item> </layout> </widget> <resources/> diff --git a/Src/GDDC/gddcSet.cpp b/Src/GDDC/gddcSet.cpp index 484307b..97f4d3c 100644 --- a/Src/GDDC/gddcSet.cpp +++ b/Src/GDDC/gddcSet.cpp @@ -14,6 +14,10 @@ GDDCSet::GDDCSet(QWidget *parent) : QWidget(parent), ui(new Ui::GDDCSet) { ui->label_3->setVisible(false); ui->comboBox_streamType->setVisible(false); + QString urlFile = QCoreApplication::applicationDirPath() + "/config.ini"; + std::unique_ptr<QSettings> configIni = std::make_unique<QSettings>(urlFile, QSettings::IniFormat); + QString podIp = configIni->value("Pod/IP").toString(); + initPullURL(podIp); } GDDCSet::~GDDCSet() { diff --git a/Src/UserManage/UserManage.pri b/Src/UserManage/UserManage.pri new file mode 100644 index 0000000..47c06b5 --- /dev/null +++ b/Src/UserManage/UserManage.pri @@ -0,0 +1,13 @@ +HEADERS += \ + $$PWD/mydatabase.h \ + $$PWD/userlogin.h + +SOURCES += \ + $$PWD/mydatabase.cpp \ + $$PWD/userlogin.cpp + +RESOURCES += \ + $$PWD/res.qrc + +FORMS += \ + $$PWD/userlogin.ui diff --git a/Src/UserManage/img/eyesOpen.png b/Src/UserManage/img/eyesOpen.png new file mode 100644 index 0000000000000000000000000000000000000000..8e50834912db47b271aa1efa265970030a37dd25 GIT binary patch literal 7673 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 P-B*gTYBE()=E4611vtp^ literal 0 HcmV?d00001 diff --git a/Src/UserManage/img/eyesOpen1.png b/Src/UserManage/img/eyesOpen1.png new file mode 100644 index 0000000000000000000000000000000000000000..01c41839f8172463f3d0480e0c06649ac778dc33 GIT binary patch literal 8320 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 JHPYsx{{xh$)uR9a literal 0 HcmV?d00001 diff --git a/Src/UserManage/mydatabase.cpp b/Src/UserManage/mydatabase.cpp new file mode 100644 index 0000000..56710e4 --- /dev/null +++ b/Src/UserManage/mydatabase.cpp @@ -0,0 +1,243 @@ +#include "mydatabase.h" +#include <QCoreApplication> + +MyDatabase::MyDatabase() +{ + if (QSqlDatabase::contains("qt_sql_default_connection")) + { + database = QSqlDatabase::database("qt_sql_default_connection"); + } + else + { + // 建立和SQlite数据库的连接 + database = QSqlDatabase::addDatabase("QSQLITE"); + QString dbPath = QCoreApplication::applicationDirPath() + "//UserDataBase.db"; + // 设置数据库文件的名字 + database.setDatabaseName(dbPath); + database.setUserName("root"); + database.setPassword("123456"); + } + + openDb(); + if(!isTableExist("user")) + { + createTable(); + } + + QList<userData> list; + userData u1 = {"wanghaoyu1","123456","yingji"}; + userData u2 = {"wanghaoyu2","123456","ceshi"}; + userData u3 = {"wanghaoyu3","123456","haha"}; + list += {u1,u2,u3}; + + multipleInsertData(list); + userData u4 = {"wanghaoyu4","123456","yingji1"}; + singleInsertData(u4); + // deleteData("wanghaoyu4"); + // queryDataByUsername("wanghaoyu3"); + // updateDataByUsername("wanghaoyu3","234567","ceshi"); +} + +bool MyDatabase::openDb() +{ + if (!database.open()) + { + qDebug() << "Error: Failed to connect database." << database.lastError(); + return false; + } + else + { + qDebug() << "数据库打开成功." ; + } + + return true; +} + +void MyDatabase::createTable() +{ + // 用于执行sql语句的对象 + QSqlQuery sqlQuery; + // 构建创建数据库的sql语句字符串 + QString createSql = QString("CREATE TABLE IF NOT EXISTS user (\ + id INTEGER PRIMARY KEY AUTOINCREMENT,\ + username VARCHAR(50) UNIQUE NOT NULL,\ + password VARCHAR(50) NOT NULL,\ + scene VARCHAR(100) NOT NULL,\ + is_del INTEGER DEFAULT 0,\ + created_at TIMESTAMP DEFAULT (DATETIME('now', 'localtime')),\ + updated_at TIMESTAMP DEFAULT (DATETIME('now', 'localtime')))"); + sqlQuery.prepare(createSql); + + // 创建触发器 + QString triggerSql = R"( + CREATE TRIGGER IF NOT EXISTS update_user_updated_at + AFTER UPDATE ON user + FOR EACH ROW + BEGIN + UPDATE user SET updated_at = CURRENT_TIMESTAMP WHERE id = OLD.id; + END; + )"; + + // 执行sql语句 + if(!sqlQuery.exec()) + { + qDebug() << "Error: Fail to create table. " << sqlQuery.lastError(); + } + else + { + qDebug() << "Table created!"; + } +} + +bool MyDatabase::isTableExist(const QString &tableName) +{ + if(!database.isOpen()) + { + return false; + } + + return database.tables().contains(tableName); +} + +bool MyDatabase::singleInsertData(userData &singleData) +{ + database.transaction();//开启事务 + QSqlQuery sqlQuery; + sqlQuery.prepare("INSERT INTO user (username, password, scene) VALUES(?, ?, ?)"); + sqlQuery.addBindValue(singleData.username); + sqlQuery.addBindValue(singleData.password); + sqlQuery.addBindValue(singleData.scene); + if(!sqlQuery.exec()) + { + if(sqlQuery.lastError().text().contains("UNIQUE constraint failed")) + { + qDebug() << "用户名已存在:" << singleData.username; + } + qDebug() << "Error: Fail to insert data. " << sqlQuery.lastError(); + database.rollback();//回滚 + return false; + } + else + { + database.commit();//提交 + return true; + } +} + +bool MyDatabase::multipleInsertData(QList<userData> &multipleData) +{ + database.transaction();//开启事务 + QSqlQuery sqlQuery; + sqlQuery.prepare("INSERT INTO user (username, password, scene) VALUES(?, ?, ?)"); + + QVariantList usernameList,passwordList,sceneList; + for(userData value : multipleData) + { + usernameList << value.username; + passwordList << value.password; + sceneList << value.scene; + } + + sqlQuery.addBindValue(usernameList); + sqlQuery.addBindValue(passwordList); + sqlQuery.addBindValue(sceneList); + + if(!sqlQuery.execBatch()) + { + qDebug() << "Error: Fail to insert data. " << sqlQuery.lastError(); + database.rollback();//回滚 + return false; + } + else + { + database.commit();//提交 + return true; + } +} + +bool MyDatabase::deleteData(const QString &username) +{ + database.transaction(); + QSqlQuery sqlQuery; + sqlQuery.prepare("UPDATE user SET is_del=?,updated_at=(DATETIME('now', 'localtime')) WHERE username=?"); + sqlQuery.addBindValue(1); + sqlQuery.addBindValue(username); + if(!sqlQuery.exec()) + { + qDebug() << "Error: Fail to delete data. "<< sqlQuery.lastError(); + database.rollback(); + return false; + } + else + { + qDebug() << "delete data success!"; + database.commit(); + return true; + } +} + +bool MyDatabase::updateDataByUsername(const QString &username, const QString &password, const QString &scene) +{ + if(!queryDataByUsername(username))//根据用户名没有查询到数据-不进行更新操作 + { + return false; + } + database.transaction(); + QSqlQuery sqlQuery; + sqlQuery.prepare("UPDATE user SET password=? ,scene=?,updated_at=(DATETIME('now', 'localtime')) WHERE username=?"); + sqlQuery.addBindValue(password); + sqlQuery.addBindValue(scene); + sqlQuery.addBindValue(username); + if(!sqlQuery.exec()) + { + qDebug() << "Error: Fail to update data. "<< sqlQuery.lastError(); + database.rollback(); + return false; + } + else + { + qDebug() << "update data success!"; + database.commit(); + return true; + } +} + +bool MyDatabase::queryDataByUsername(const QString &username) +{ + QSqlQuery sqlQuery; + sqlQuery.prepare("SELECT * FROM user WHERE is_del = 0 AND username=?"); + sqlQuery.addBindValue(username); + if(!sqlQuery.exec()) + { + qDebug() << "Error: Fail to query table. " << sqlQuery.lastError(); + return false; + } + else + { + qDebug() << "query data success!"; + if(!sqlQuery.next()) + { + qDebug() << "No data found!";//没找到数据 + return false; + } + + sqlQuery.previous(); + + while(sqlQuery.next()) + { + int id = sqlQuery.value("id").toInt(); + _queryUserData.username = sqlQuery.value("username").toString(); + _queryUserData.password = sqlQuery.value("password").toString(); + _queryUserData.scene = sqlQuery.value("scene").toString(); + + qDebug()<<QString("id:%1 username:%2 password:%3 scene:%4") + .arg(id).arg(_queryUserData.username).arg(_queryUserData.password).arg(_queryUserData.scene); + } + return true; + } +} + +userData MyDatabase::getQueryUserData() +{ + return _queryUserData; +} diff --git a/Src/UserManage/mydatabase.h b/Src/UserManage/mydatabase.h new file mode 100644 index 0000000..3726f63 --- /dev/null +++ b/Src/UserManage/mydatabase.h @@ -0,0 +1,51 @@ +#ifndef MYDATABASE_H +#define MYDATABASE_H + +#include <QSqlDatabase> +#include <QSqlQuery> +#include <QSqlError> +#include <QDebug> +#include <QList> + +typedef struct +{ + QString username; + QString password; + QString scene; +}userData; + +class MyDatabase +{ +public: + MyDatabase(); + + // 打开数据库 + bool openDb(); + + // 创建数据表 + void createTable(); + + // 判断数据表是否存在 + bool isTableExist(const QString& tableName); + + // 插入数据 + bool singleInsertData(userData &singleData); // 插入单条数据 + bool multipleInsertData(QList<userData> &multipleData); // 插入多条数据 + + //删除数据 + bool deleteData(const QString &username); + + //修改数据-密码 场景 + bool updateDataByUsername(const QString &username, const QString &password, const QString &scene); + + //查询数据 + bool queryDataByUsername(const QString &username); + + //获取查询到的数据 + userData getQueryUserData(); +private: + QSqlDatabase database;// 用于建立和数据库的连接 + userData _queryUserData; +}; + +#endif // MYDATABASE_H diff --git a/Src/UserManage/res.qrc b/Src/UserManage/res.qrc new file mode 100644 index 0000000..01441c3 --- /dev/null +++ b/Src/UserManage/res.qrc @@ -0,0 +1,6 @@ +<RCC> + <qresource prefix="/"> + <file>img/eyesOpen.png</file> + <file>img/eyesOpen1.png</file> + </qresource> +</RCC> diff --git a/Src/UserManage/userlogin.cpp b/Src/UserManage/userlogin.cpp new file mode 100644 index 0000000..5846864 --- /dev/null +++ b/Src/UserManage/userlogin.cpp @@ -0,0 +1,230 @@ +#include "userlogin.h" +#include "ui_userlogin.h" +#include <QMessageBox> +#include <QRegularExpressionValidator> +#include <QLabel> + +UserLogin::UserLogin(QWidget *parent) + : QWidget(parent) + , ui(new Ui::UserLogin) +{ + ui->setupUi(this); + initLineEdit(); + initControls(); +} + +UserLogin::~UserLogin() +{ + delete ui; +} + +void UserLogin::initLineEdit() +{ + // 定义正则表达式:允许大写字母、小写字母、数字和特殊符号 + QRegularExpression regExp("[A-Za-z0-9!@#$%^&*()_+\\-=\\[\\]{};':\"\\\\|,.<>\\/?]+"); + + // 创建验证器 + QRegularExpressionValidator *validator = new QRegularExpressionValidator(regExp, this); + + // 设置验证器 + ui->userlineEdit->setValidator(validator); + ui->passwordlineEdit->setValidator(validator); +} + +void UserLogin::initControls() +{ + QPixmap pixmap(":/res/SDFP3.png"); + ui->loginlabel->setPixmap(pixmap); + ui->loginlabel->setScaledContents(true); + + ui->widget_2->setStyleSheet("background-color: #1E1E1D;" + "border-top-left-radius: 20px; " + "border-top-right-radius: 20px;"); + + ui->widget_3->setObjectName("widget_3"); // 给 widget_3 设置对象名称 + ui->widget_3->setStyleSheet("QWidget#widget_3 {" + "background-color: #363636;" + "border-bottom-left-radius: 20px; " + "border-bottom-right-radius: 20px;" + "}"); + + ui->userlineEdit->setStyleSheet("border-radius: 5px;"); + ui->passwordlineEdit->setStyleSheet("border-radius: 5px;"); + ui->loginButton->setStyleSheet("QPushButton{" + "font-family: STHupo;" + "border-radius: 15px;" + "color: white;" + "font-weight: bold;" + "border: none;" + "background-color: #5289C1;" + "font-size: 20px;" + "}" + // 设置按钮悬停时的样式 + "QPushButton:hover {" + "background-color: #4078A9;" // 悬停时的背景颜色 + "}" + // 设置按钮按下或选中时的渐变背景 + "QPushButton::pressed, QPushButton::checked {" + "color: #FFFFFF;" // 字体颜色为白色 + "background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, " + "stop:0 #273c75, stop:1 #487eb0);" // 渐变背景 + "}"); + + ui->exitButton->setStyleSheet("QPushButton{" + "font-family: STHupo;" + "border-radius: 15px;" + "color: white;" + "font-weight: bold;" + "border: none;" + "background-color: #A52A2A;" + "font-size: 20px;" + "}" + // 设置按钮悬停时的样式 + "QPushButton:hover {" + "background-color: #8B1C1C;" // 悬停时的背景颜色 + "}" + // 设置按钮按下或选中时的渐变背景 + "QPushButton::pressed, QPushButton::checked {" + "color: #FFFFFF;" // 字体颜色为白色 + "background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, " + "stop:0 #5C1919, stop:1 #9E2A2A);" // 渐变背景 + "}"); + + + _passwordCheckBox = new QCheckBox(ui->passwordlineEdit); + //设置样式表(图片为眼睛样式) + _passwordCheckBox->setStyleSheet("QCheckBox::indicator {" + "width: 20px;" + "height: 20px;" + "image: url(:/res/eyec1.png);" // 未选中时的图片 + "}" + "QCheckBox::indicator:checked {" + "image: url(:/res/eye3.png);" // 选中时的图片 + "}"); + + + ui->label->setStyleSheet("QLabel {" + "font-family: 'STHupo';" // 使用艺术字体 + "font-size: 40px;" // 设置字体大小 + "font-weight: bold;" // 设置加粗 + "color: #5289C1;" // 设置字体颜色 + "text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5);" // 添加阴影效果 + "}"); + ui->label->setAlignment(Qt::AlignCenter); + + ui->pushButton->setStyleSheet("QPushButton {" + "border: none;" // 没有边框 + "color: white;" // 默认字体颜色为白色 + "font-size: 18px;" // 字体大小为 20 + "font-weight: bold;" + "background-color: transparent;" // 背景透明 + "font-family: 'STHeiti';" + "}" + + // 设置按钮悬停时的样式 + "QPushButton:hover {" + "color: #5289C1;" // 悬停时字体颜色变为橙色 + "}" + + // 设置按钮按下时的字体颜色 + "QPushButton:pressed {" + "color: #4A7DB0;" // 按下时字体颜色变为绿色 + "}" + + // 设置按钮选中时的样式 + "QPushButton:checked {" + "color: #5289C1;" // 选中时字体颜色变为绿色 + "}"); + + connect(_passwordCheckBox,&QCheckBox::checkStateChanged,this,[this](int state){ + if(state == Qt::Checked) + { + ui->passwordlineEdit->setEchoMode(QLineEdit::Normal); + } + else if(state == Qt::Unchecked) + { + ui->passwordlineEdit->setEchoMode(QLineEdit::Password); + } + }); + +} + +bool UserLogin::checkEditFormat(const QString &edit, const QString &origins) +{ + if(edit.isEmpty()) + { + QMessageBox::information(NULL, "提示", "输入"+origins+"不能为空!"); + return false; + } + else + { + // 定义正则表达式:至少 8 个字符,且只能是大写字母、小写字母、数字和特殊符号 + QRegularExpression regExp("[A-Za-z0-9!@#$%^&*()_+\\-=\\[\\]{};':\"\\\\|,.<>\\/?]{6,}"); + + // 检查输入内容 + if (!regExp.match(edit).hasMatch()) + { + QMessageBox::information(NULL, "提示", origins +"至少输入 6 个字符,且只能包含大写字母、小写字母、数字和特殊符号!"); + return false; + } + } + return true; +} + +void UserLogin::resizeEvent(QResizeEvent *event) +{ + QWidget::resizeEvent(event); + _passwordCheckBox->setGeometry(ui->passwordlineEdit->width()-30,(ui->passwordlineEdit->height()/2)-10,20,20); +} + +void UserLogin::on_loginButton_clicked() +{ + if(!checkEditFormat(ui->userlineEdit->text(),"用户名")) + return; + if(!checkEditFormat(ui->passwordlineEdit->text(),"密码")) + return; + + //查询到数据 + if(dataBase.queryDataByUsername(ui->userlineEdit->text())) + { + _queryUserData = dataBase.getQueryUserData(); + if(_queryUserData.password == ui->passwordlineEdit->text())//密码匹配 + { + //判断场景 + if(_queryUserData.scene == "yingji") + { + emit sendSenceData(use_sence::Emergency); + QMessageBox::information(NULL, "提示", "进入应急场景!"); + } + else if(_queryUserData.scene == "ceshi") + { + emit sendSenceData(use_sence::Sea_Rescue); + QMessageBox::information(NULL, "提示", "进入测试场景!"); + } + } + else + { + QMessageBox::information(NULL, "提示", "密码输入错误!"); + return; + } + } + else + { + //用户名不存在 + QMessageBox::information(NULL, "提示", "用户名不存在!"); + return; + } +} + + +void UserLogin::on_pushButton_clicked() +{ + emit loginDlgClick(click_type::HomePageClick); +} + + +void UserLogin::on_exitButton_clicked() +{ + emit loginDlgClick(click_type::ExitLogin); +} + diff --git a/Src/UserManage/userlogin.h b/Src/UserManage/userlogin.h new file mode 100644 index 0000000..945abfa --- /dev/null +++ b/Src/UserManage/userlogin.h @@ -0,0 +1,55 @@ +#ifndef USERLOGIN_H +#define USERLOGIN_H + +#include <QCheckBox> +#include <QWidget> +#include "mydatabase.h" + +namespace Ui { +class UserLogin; +} + +class UserLogin : public QWidget +{ + Q_OBJECT + +public: + explicit UserLogin(QWidget *parent = nullptr); + ~UserLogin(); + + enum use_sence : unsigned char + { + Emergency = 1, //应急 1 + Sea_Rescue, //海上救捞 2 + }; + + enum click_type : unsigned char + { + HomePageClick = 0, //主页点击 + ExitLogin, //退出登录 + }; + +private slots: + void on_loginButton_clicked(); + + void on_pushButton_clicked(); + + void on_exitButton_clicked(); + +private: + Ui::UserLogin *ui; + MyDatabase dataBase; + void initLineEdit(); + void initControls(); + bool checkEditFormat(const QString &edit, const QString &origins); + userData _queryUserData; + QCheckBox *_passwordCheckBox; +signals: + void sendSenceData(use_sence sence); + void loginDlgClick(int clickType); + +protected: + void resizeEvent(QResizeEvent *event) override; +}; + +#endif // USERLOGIN_H diff --git a/Src/UserManage/userlogin.ui b/Src/UserManage/userlogin.ui new file mode 100644 index 0000000..8ea3dfa --- /dev/null +++ b/Src/UserManage/userlogin.ui @@ -0,0 +1,573 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>UserLogin</class> + <widget class="QWidget" name="UserLogin"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>1288</width> + <height>826</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <property name="topMargin"> + <number>0</number> + </property> + <item> + <widget class="QStackedWidget" name="stackedWidget"> + <property name="styleSheet"> + <string notr="true"/> + </property> + <property name="currentIndex"> + <number>0</number> + </property> + <widget class="QWidget" name="page"> + <layout class="QGridLayout" name="gridLayout"> + <item row="1" column="2"> + <spacer name="horizontalSpacer_4"> + <property name="orientation"> + <enum>Qt::Orientation::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item row="0" column="0" colspan="3"> + <widget class="QWidget" name="widget" native="true"> + <property name="maximumSize"> + <size> + <width>16777215</width> + <height>40</height> + </size> + </property> + <layout class="QGridLayout" name="gridLayout_3"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <property name="spacing"> + <number>0</number> + </property> + <item row="0" column="1"> + <widget class="QPushButton" name="pushButton"> + <property name="maximumSize"> + <size> + <width>40</width> + <height>16777215</height> + </size> + </property> + <property name="text"> + <string>主页</string> + </property> + </widget> + </item> + <item row="0" column="0"> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Orientation::Horizontal</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Policy::Fixed</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item row="0" column="2"> + <spacer name="horizontalSpacer_2"> + <property name="orientation"> + <enum>Qt::Orientation::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + </item> + <item row="2" column="1"> + <spacer name="verticalSpacer"> + <property name="orientation"> + <enum>Qt::Orientation::Vertical</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Policy::Fixed</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>130</height> + </size> + </property> + </spacer> + </item> + <item row="1" column="1"> + <widget class="QWidget" name="widget_l" native="true"> + <layout class="QVBoxLayout" name="verticalLayout"> + <property name="spacing"> + <number>0</number> + </property> + <item> + <widget class="QWidget" name="widget_2" native="true"> + <property name="minimumSize"> + <size> + <width>0</width> + <height>200</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>16777215</width> + <height>220</height> + </size> + </property> + <layout class="QGridLayout" name="gridLayout_2"> + <property name="verticalSpacing"> + <number>0</number> + </property> + <item row="1" column="0"> + <spacer name="horizontalSpacer_5"> + <property name="orientation"> + <enum>Qt::Orientation::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item row="1" column="1"> + <widget class="QLabel" name="loginlabel"> + <property name="minimumSize"> + <size> + <width>100</width> + <height>100</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>200</width> + <height>200</height> + </size> + </property> + <property name="text"> + <string/> + </property> + <property name="alignment"> + <set>Qt::AlignmentFlag::AlignCenter</set> + </property> + </widget> + </item> + <item row="1" column="2"> + <spacer name="horizontalSpacer_6"> + <property name="orientation"> + <enum>Qt::Orientation::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item row="2" column="0" colspan="3"> + <widget class="QLabel" name="label"> + <property name="minimumSize"> + <size> + <width>0</width> + <height>39</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>16777215</width> + <height>40</height> + </size> + </property> + <property name="layoutDirection"> + <enum>Qt::LayoutDirection::LeftToRight</enum> + </property> + <property name="text"> + <string>HTFP-PayLoad</string> + </property> + <property name="alignment"> + <set>Qt::AlignmentFlag::AlignHCenter|Qt::AlignmentFlag::AlignTop</set> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QWidget" name="widget_3" native="true"> + <layout class="QVBoxLayout" name="verticalLayout_2"> + <item> + <spacer name="verticalSpacer_4"> + <property name="orientation"> + <enum>Qt::Orientation::Vertical</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Policy::Fixed</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>28</height> + </size> + </property> + </spacer> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout"> + <property name="spacing"> + <number>0</number> + </property> + <item> + <spacer name="horizontalSpacer_7"> + <property name="orientation"> + <enum>Qt::Orientation::Horizontal</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Policy::Fixed</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QLineEdit" name="userlineEdit"> + <property name="minimumSize"> + <size> + <width>400</width> + <height>40</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>480</width> + <height>50</height> + </size> + </property> + <property name="placeholderText"> + <string>用户名</string> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_8"> + <property name="orientation"> + <enum>Qt::Orientation::Horizontal</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Policy::Fixed</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + <item> + <spacer name="verticalSpacer_2"> + <property name="orientation"> + <enum>Qt::Orientation::Vertical</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Policy::Fixed</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>30</height> + </size> + </property> + </spacer> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_3"> + <property name="spacing"> + <number>0</number> + </property> + <item> + <spacer name="horizontalSpacer_9"> + <property name="orientation"> + <enum>Qt::Orientation::Horizontal</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Policy::Fixed</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QLineEdit" name="passwordlineEdit"> + <property name="minimumSize"> + <size> + <width>400</width> + <height>39</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>480</width> + <height>40</height> + </size> + </property> + <property name="echoMode"> + <enum>QLineEdit::EchoMode::Password</enum> + </property> + <property name="placeholderText"> + <string>密码</string> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_10"> + <property name="orientation"> + <enum>Qt::Orientation::Horizontal</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Policy::Fixed</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + <item> + <spacer name="verticalSpacer_3"> + <property name="orientation"> + <enum>Qt::Orientation::Vertical</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Policy::Fixed</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>30</height> + </size> + </property> + </spacer> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_4"> + <property name="spacing"> + <number>0</number> + </property> + <item> + <spacer name="horizontalSpacer_11"> + <property name="orientation"> + <enum>Qt::Orientation::Horizontal</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Policy::Fixed</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QPushButton" name="loginButton"> + <property name="minimumSize"> + <size> + <width>200</width> + <height>40</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>480</width> + <height>50</height> + </size> + </property> + <property name="text"> + <string>登录</string> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_14"> + <property name="orientation"> + <enum>Qt::Orientation::Horizontal</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Policy::Fixed</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + <item> + <spacer name="verticalSpacer_6"> + <property name="orientation"> + <enum>Qt::Orientation::Vertical</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Policy::Fixed</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>30</height> + </size> + </property> + </spacer> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout_5"> + <property name="spacing"> + <number>0</number> + </property> + <item> + <spacer name="horizontalSpacer_12"> + <property name="orientation"> + <enum>Qt::Orientation::Horizontal</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Policy::Fixed</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QPushButton" name="exitButton"> + <property name="minimumSize"> + <size> + <width>200</width> + <height>40</height> + </size> + </property> + <property name="maximumSize"> + <size> + <width>480</width> + <height>50</height> + </size> + </property> + <property name="text"> + <string>退出登录</string> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_15"> + <property name="orientation"> + <enum>Qt::Orientation::Horizontal</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Policy::Fixed</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + <item> + <spacer name="verticalSpacer_5"> + <property name="orientation"> + <enum>Qt::Orientation::Vertical</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Policy::MinimumExpanding</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>40</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + </item> + </layout> + </widget> + </item> + <item row="1" column="0"> + <spacer name="horizontalSpacer_3"> + <property name="orientation"> + <enum>Qt::Orientation::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/mainwindow.cpp b/mainwindow.cpp index 39ca936..02562e0 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -19,6 +19,7 @@ #include "global.h" #include "ui_mainwindow.h" + MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); @@ -46,6 +47,7 @@ MainWindow::MainWindow(QWidget *parent) initUAVIDMap(); initNotifyManager(); + initUserLoginDlg(); } MainWindow::~MainWindow() { @@ -92,36 +94,26 @@ void MainWindow::initWindow() { // 使用类中的get方法获取配置文件中的IP m_allSetMap = m_HomePagedlg->settingWidget->getAllParam(); - m_GDDCdlg->setGlobalSetMap(m_allSetMap); - qDebug() << "=============设备配置================"; + //m_GDDCdlg->setGlobalSetMap(m_allSetMap); + /*qDebug() << "=============设备配置================"; qDebug() << "光电吊舱------"; - qDebug() << "远端ip" << m_allSetMap["光电吊舱"].net.remoteIp; + qDebug() << "远端ip" << m_allSetMap["Pod"].net.remoteIp; qDebug() << "L链----------"; - qDebug() << "ULR:" << m_allSetMap["L链"].url; + qDebug() << "ULR:" << m_allSetMap["L-Link"].url; qDebug() << "宽带自组网-----"; - qDebug() << "URL:" << m_allSetMap["宽带自组网"].url; + qDebug() << "URL:" << m_allSetMap["HocNetwork"].url; qDebug() << "机载卫通------"; - qDebug() << "URL:" << m_allSetMap["机载卫通"].url; + qDebug() << "URL:" << m_allSetMap["SatelliteComm"].url; qDebug() << "三维建模------"; - qDebug() << "远端ip:" << m_allSetMap["三维建模"].net.remoteIp; - qDebug() << "远端端口:" << m_allSetMap["三维建模"].net.remotePort; - qDebug() << "本地ip:" << m_allSetMap["三维建模"].net.localIp; - qDebug() << "本地端口:" << m_allSetMap["三维建模"].net.localPort; - - // mWeb = new CWebEngineView(); - // mWeb->setPage(new CustomWebEnginePage()); - // mWeb->load(QUrl("http://192.168.150.1")); + qDebug() << "远端ip:" << m_allSetMap["ModelCamera"].net.remoteIp; + qDebug() << "远端端口:" << m_allSetMap["ModelCamera"].net.remotePort; + qDebug() << "本地ip:" << m_allSetMap["ModelCamera"].net.localIp; + qDebug() << "本地端口:" << m_allSetMap["ModelCamera"].net.localPort;*/ + lLinkWeb = new CWebEngineView(); lLinkWeb->setPage(new CustomWebEnginePage()); - lLinkWeb->load(QUrl(m_allSetMap["L链"].url)); + lLinkWeb->load(QUrl(m_allSetMap["L-Link"].url)); connect(lLinkWeb->page(), &QWebEnginePage::loadFinished, this, [=]() { - // QString jsScript = R"( - // var usernameField = - // document.querySelector('input[name="username"]'); if - // (usernameField) { - // usernameField.value = 'admin'; // 填充用户名 - // } - // )"; QString jsScript = R"( var button = document.getElementById('clickButt'); if (button) { @@ -139,21 +131,20 @@ void MainWindow::initWindow() { adHocNetworkWeb = new CWebEngineView(); adHocNetworkWeb->setPage(new CustomWebEnginePage()); - adHocNetworkWeb->load(QUrl(m_allSetMap["宽带自组网"].url)); + adHocNetworkWeb->load(QUrl(m_allSetMap["HocNetwork"].url)); satelliteCommWeb = new CWebEngineView(); satelliteCommWeb->setPage(new CustomWebEnginePage()); - satelliteCommWeb->load(QUrl(m_allSetMap["机载卫通"].url)); + satelliteCommWeb->load(QUrl(m_allSetMap["SatelliteComm"].url)); m_ModelCameraDlg = new ModelCameraDlg(this); - emit m_ModelCameraDlg->sendNetParam_signal(m_allSetMap["三维建模"].net); + emit m_ModelCameraDlg->sendNetParam_signal(m_allSetMap["ModelCamera"].net); // 接收主页面设置窗口的url数据传递并设置 connect( m_HomePagedlg->settingWidget, &HomePageSetingWidget::sendOneSet, this, [&](unsigned char urlIndex, settingStruct settings) { switch (urlIndex) { case HomePageSetingWidget::GDDC: - // dosomething m_GDDCdlg->m_DlgGDDCSet->initPullURL(settings.net.remoteIp); break; case HomePageSetingWidget::L_Link: @@ -177,7 +168,6 @@ void MainWindow::initWindow() { ui->stackedWidget->addWidget(m_SDFPDlg); ui->stackedWidget->addWidget(m_HomePagedlg); ui->stackedWidget->addWidget(m_GDDCdlg); - // ui->stackedWidget->addWidget(mWeb); ui->stackedWidget->addWidget(lLinkWeb); ui->stackedWidget->addWidget(adHocNetworkWeb); ui->stackedWidget->addWidget(satelliteCommWeb); @@ -185,6 +175,7 @@ void MainWindow::initWindow() { ui->stackedWidget->addWidget(m_ModelCameraDlg); // 初始栈窗口显示主页 ui->stackedWidget->setCurrentWidget(m_SDFPDlg); + ui->senceContrlWidget->hide(); } void MainWindow::initButton() { @@ -200,6 +191,8 @@ void MainWindow::initButton() { ui->toolButton_7->setIcon(QIcon(":/res/research.png")); ui->toolButton_8->setIcon(QIcon(":/res/3D.png")); ui->toolButton_9->setIcon(QIcon(":/res/SDFP3.png")); + ui->toolButton_10->setIcon(QIcon(":/res/SDFP3.png")); + ui->toolButton_21->setIcon(QIcon(":/res/GDDC.png")); ui->toolButton->setIconSize(QSize(sizeX, sizeY)); ui->toolButton_2->setIconSize(QSize(sizeX, sizeY)); ui->toolButton_3->setIconSize(QSize(sizeX, sizeY)); @@ -209,6 +202,8 @@ void MainWindow::initButton() { ui->toolButton_7->setIconSize(QSize(sizeX, sizeY)); ui->toolButton_8->setIconSize(QSize(sizeX, sizeY)); ui->toolButton_9->setIconSize(QSize(sizeX * 1.2, sizeY * 1.2)); + ui->toolButton_10->setIconSize(QSize(sizeX * 1.2, sizeY * 1.2)); + ui->toolButton_21->setIconSize(QSize(sizeX, sizeY)); ui->toolButton->setText("主页"); ui->toolButton_2->setText("光电吊舱"); ui->toolButton_3->setText("L链"); @@ -218,6 +213,8 @@ void MainWindow::initButton() { ui->toolButton_7->setText("搜救载荷"); ui->toolButton_8->setText("三维建模"); ui->toolButton_9->setText("时代飞鹏"); + ui->toolButton_10->setText("时代飞鹏"); + ui->toolButton_21->setText("光电吊舱"); ui->toolButton->setFixedWidth(FixedWidth); ui->toolButton_2->setFixedWidth(FixedWidth); ui->toolButton_3->setFixedWidth(FixedWidth); @@ -227,6 +224,8 @@ void MainWindow::initButton() { ui->toolButton_7->setFixedWidth(FixedWidth); ui->toolButton_8->setFixedWidth(FixedWidth); ui->toolButton_9->setFixedWidth(FixedWidth); + ui->toolButton_10->setFixedWidth(FixedWidth); + ui->toolButton_21->setFixedWidth(FixedWidth); ui->toolButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); ui->toolButton_2->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); ui->toolButton_3->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); @@ -236,6 +235,8 @@ void MainWindow::initButton() { ui->toolButton_7->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); ui->toolButton_8->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); ui->toolButton_9->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); + ui->toolButton_10->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); + ui->toolButton_21->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); ui->toolButton->setStyleSheet(g_ToolBtnStyle); ui->toolButton_2->setStyleSheet(g_ToolBtnStyle); ui->toolButton_3->setStyleSheet(g_ToolBtnStyle); @@ -245,6 +246,8 @@ void MainWindow::initButton() { ui->toolButton_7->setStyleSheet(g_ToolBtnStyle); ui->toolButton_8->setStyleSheet(g_ToolBtnStyle); ui->toolButton_9->setStyleSheet(g_ToolBtnStyle); + ui->toolButton_10->setStyleSheet(g_ToolBtnStyle); + ui->toolButton_21->setStyleSheet(g_ToolBtnStyle); // ui->pushButton->setStyleSheet(g_PushBtnStyle); } @@ -359,6 +362,28 @@ void MainWindow::toolButton_9_clicked() { ui->stackedWidget->setCurrentWidget(m_SDFPDlg); } +void MainWindow::getUserSence(UserLogin::use_sence sence) +{ + _currentScene = sence; + switch(sence) + { + case UserLogin::Emergency: + { + QMessageBox::information(NULL, "提示", "进入switch emergency!"); + emergencySceneShow(); + break; + } + case UserLogin::Sea_Rescue: + { + QMessageBox::information(NULL, "提示", "进入switch Sea_Rescue!"); + seaRescueSceneShow(); + break; + } + default: + break; + } +} + // 更新主界面按钮颜色 void MainWindow::changeBtnColor(int num) { initButton(); @@ -390,6 +415,12 @@ void MainWindow::changeBtnColor(int num) { case 9: ui->toolButton_9->setStyleSheet(g_ToolBtnSelStyle); break; + case 10: + ui->toolButton_10->setStyleSheet(g_ToolBtnSelStyle); + break; + case 11: + ui->toolButton_21->setStyleSheet(g_ToolBtnSelStyle); + break; } } @@ -424,6 +455,22 @@ void MainWindow::initNotifyManager() { g_notifyManager->setNotifyWndSize(300, 60); } +void MainWindow::initUserLoginDlg() +{ + m_userLoginDlg = new UserLogin(this); + // m_userLoginDlg->setWindowFlags(Qt::Dialog); + // m_userLoginDlg->show(); + + ui->stackedWidget->addWidget(m_userLoginDlg); + + _currentScene = 0; + + //初始化槽函数 + connect(m_userLoginDlg,&UserLogin::sendSenceData,this,&MainWindow::getUserSence); + connect(m_userLoginDlg,&UserLogin::loginDlgClick,this,&MainWindow::getloginDlgBtnClicked); + connect(m_SDFPDlg,&SDFPDlg::clickLoginBtn,this,&MainWindow::receptLoginBtnClicked); +} + bool MainWindow::nativeEvent(const QByteArray &eventType, void *message, qintptr *result) { #ifdef Q_OS_WIN @@ -439,3 +486,78 @@ bool MainWindow::nativeEvent(const QByteArray &eventType, void *message, #endif return QMainWindow::nativeEvent(eventType, message, result); } + +// 海上 主页面 +void MainWindow::on_toolButton_10_clicked() +{ + changeBtnColor(10); + ui->stackedWidget->setCurrentWidget(m_SDFPDlg); +} + +// 海上 光电吊舱 +void MainWindow::on_toolButton_21_clicked() +{ + changeBtnColor(11); + ui->stackedWidget->setCurrentWidget(m_GDDCdlg); +} + +void MainWindow::receptLoginBtnClicked() +{ + ui->senceContrlWidget->hide(); + ui->stackedWidget->setCurrentWidget(m_userLoginDlg); +} + +void MainWindow::getloginDlgBtnClicked(int clickType) +{ + switch(clickType) + { + case UserLogin::click_type::HomePageClick: + { + if(_currentScene == 0) + { + ui->senceContrlWidget->hide(); + ui->stackedWidget->setCurrentWidget(m_SDFPDlg); + } + else if(_currentScene == 1) + { + emergencySceneShow(); + } + else if(_currentScene == 2) + { + seaRescueSceneShow(); + } + break; + } + case UserLogin::click_type::ExitLogin: //退出登录 + { + _currentScene = 0; + ui->stackedWidget->setCurrentWidget(m_SDFPDlg); + ui->senceContrlWidget->hide(); + } + default: + break; + } +} + +//应急场景显示 +void MainWindow::emergencySceneShow() +{ + toolButton_9_clicked(); + ui->senceContrlWidget->setCurrentIndex(0); + if(!ui->senceContrlWidget->isVisible()) + { + ui->senceContrlWidget->show(); + } +} + +//海上就捞场景显示 +void MainWindow::seaRescueSceneShow() +{ + on_toolButton_10_clicked(); + ui->senceContrlWidget->setCurrentIndex(1); + if(!ui->senceContrlWidget->isVisible()) + { + ui->senceContrlWidget->show(); + } +} + diff --git a/mainwindow.h b/mainwindow.h index 80d9ab1..9d16799 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -18,6 +18,7 @@ #include "Src/HomePage/homepagedlg.h" #include "Src/ModelCamera/modelcameradlg.h" #include "Src/RescueLoad/rescueloadwidget.h" +#include "userlogin.h" #ifdef Q_OS_WIN #include "windows.h" @@ -61,6 +62,12 @@ private slots: void toolButton_8_clicked(); void toolButton_9_clicked(); + void getUserSence(UserLogin::use_sence sence); + void on_toolButton_10_clicked(); + + void on_toolButton_21_clicked(); + void receptLoginBtnClicked();//sdfp页面登录按钮点击 + void getloginDlgBtnClicked(int clickType);//登录页面按钮点击 public: GDDCdlg *m_GDDCdlg; HomePageDlg *m_HomePagedlg; @@ -72,11 +79,15 @@ public: QWebEngineView *lLinkWeb; // L链 QWebEngineView *adHocNetworkWeb; // 自组网 QWebEngineView *satelliteCommWeb; // 卫通 + UserLogin *m_userLoginDlg; //用户登陆页面 private: QProcess *processPDT; QString exeDirPathName = ""; std::unordered_map<QString, settingStruct> m_allSetMap; + int _currentScene; + void emergencySceneShow(); + void seaRescueSceneShow(); public: void changeBtnColor(int num); @@ -87,5 +98,8 @@ private: void initUAVIDMap(); void initNotifyManager(); + + //初始化用户登陆页面 + void initUserLoginDlg(); }; #endif // MAINWINDOW_H diff --git a/mainwindow.qrc b/mainwindow.qrc index a9a244e..0985086 100644 --- a/mainwindow.qrc +++ b/mainwindow.qrc @@ -38,5 +38,11 @@ <file>res/switch/switch_close3.png</file> <file>res/switch/switch_open3.png</file> <file>res/SDFP3.png</file> + <file>res/eyesOpen1.png</file> + <file>res/eyesOpen.png</file> + <file>res/eye1.png</file> + <file>res/eye2.png</file> + <file>res/eye3.png</file> + <file>res/eyec1.png</file> </qresource> </RCC> diff --git a/mainwindow.ui b/mainwindow.ui index cb61ae2..1afbadf 100644 --- a/mainwindow.ui +++ b/mainwindow.ui @@ -57,8 +57,25 @@ <property name="spacing"> <number>0</number> </property> - <item row="0" column="0"> - <widget class="QFrame" name="frame"> + <item row="1" column="1"> + <widget class="QStackedWidget" name="stackedWidget"> + <property name="maximumSize"> + <size> + <width>16777215</width> + <height>16777215</height> + </size> + </property> + <widget class="QWidget" name="Page1"> + <layout class="QVBoxLayout" name="SubPage"> + <property name="bottomMargin"> + <number>2</number> + </property> + </layout> + </widget> + </widget> + </item> + <item row="0" column="0" rowspan="2"> + <widget class="QStackedWidget" name="senceContrlWidget"> <property name="sizePolicy"> <sizepolicy hsizetype="Fixed" vsizetype="Preferred"> <horstretch>0</horstretch> @@ -68,138 +85,173 @@ <property name="styleSheet"> <string notr="true">background-color: rgb(40, 40, 40);</string> </property> - <layout class="QVBoxLayout" name="verticalLayout"> - <item> - <widget class="QWidget" name="widget_2" native="true"/> - </item> - <item> - <layout class="QVBoxLayout" name="verticalLayout_2"> - <item> - <widget class="QToolButton" name="toolButton_9"> - <property name="text"> - <string>...</string> - </property> - </widget> - </item> - <item> - <widget class="QToolButton" name="toolButton"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string>...</string> - </property> - </widget> - </item> - <item> - <widget class="QToolButton" name="toolButton_2"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string>...</string> - </property> - </widget> - </item> - <item> - <widget class="QToolButton" name="toolButton_3"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string>...</string> - </property> - </widget> - </item> - <item> - <widget class="QToolButton" name="toolButton_4"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string>...</string> - </property> - </widget> - </item> - <item> - <widget class="QToolButton" name="toolButton_5"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string>...</string> - </property> - </widget> - </item> - <item> - <widget class="QToolButton" name="toolButton_6"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string>...</string> - </property> - </widget> - </item> - <item> - <widget class="QToolButton" name="toolButton_7"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string>...</string> - </property> - </widget> - </item> - <item> - <widget class="QToolButton" name="toolButton_8"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string>...</string> - </property> - </widget> - </item> - </layout> - </item> - <item> - <widget class="QWidget" name="widget" native="true"/> - </item> - </layout> - </widget> - </item> - <item row="0" column="1"> - <widget class="QStackedWidget" name="stackedWidget"> - <widget class="QWidget" name="Page1"> - <layout class="QVBoxLayout" name="SubPage"> - <property name="bottomMargin"> - <number>2</number> - </property> + <property name="currentIndex"> + <number>1</number> + </property> + <widget class="QWidget" name="stackedWidgetPage1"> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QWidget" name="widget_2" native="true"/> + </item> + <item> + <layout class="QVBoxLayout" name="verticalLayout_2"> + <item> + <widget class="QToolButton" name="toolButton_9"> + <property name="text"> + <string>...</string> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="toolButton"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>...</string> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="toolButton_2"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>...</string> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="toolButton_3"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>...</string> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="toolButton_4"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>...</string> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="toolButton_5"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>...</string> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="toolButton_6"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>...</string> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="toolButton_7"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>...</string> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="toolButton_8"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>...</string> + </property> + </widget> + </item> + </layout> + </item> + <item> + <widget class="QWidget" name="widget" native="true"/> + </item> + </layout> + </widget> + <widget class="QWidget" name="page"> + <layout class="QGridLayout" name="gridLayout_2"> + <item row="2" column="0"> + <widget class="QWidget" name="widget_9" native="true"/> + </item> + <item row="1" column="0"> + <layout class="QVBoxLayout" name="verticalLayout_3"> + <item> + <widget class="QToolButton" name="toolButton_10"> + <property name="text"> + <string>...</string> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="toolButton_21"> + <property name="text"> + <string>...</string> + </property> + </widget> + </item> + </layout> + </item> + <item row="0" column="0"> + <spacer name="verticalSpacer"> + <property name="orientation"> + <enum>Qt::Orientation::Vertical</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Policy::Fixed</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>48</height> + </size> + </property> + </spacer> + </item> </layout> </widget> </widget> @@ -261,7 +313,7 @@ </action> <action name="toolbar_action2"> <property name="icon"> - <iconset> + <iconset resource="mainwindow.qrc"> <normaloff>:/res/GDDC.png</normaloff>:/res/GDDC.png</iconset> </property> <property name="text"> @@ -273,7 +325,7 @@ </action> <action name="toolbar_action3"> <property name="icon"> - <iconset> + <iconset resource="mainwindow.qrc"> <normaloff>:/res/LChain.png</normaloff>:/res/LChain.png</iconset> </property> <property name="text"> @@ -347,6 +399,8 @@ </property> </action> </widget> - <resources/> + <resources> + <include location="mainwindow.qrc"/> + </resources> <connections/> </ui> diff --git a/res/eye1.png b/res/eye1.png new file mode 100644 index 0000000000000000000000000000000000000000..0c397c7f4aed697385467220e49e8befd8513366 GIT binary patch literal 7309 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 literal 0 HcmV?d00001 diff --git a/res/eye2.png b/res/eye2.png new file mode 100644 index 0000000000000000000000000000000000000000..9de3dce0a0860bcf071a40302ddec89d69b8c052 GIT binary patch literal 6720 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 literal 0 HcmV?d00001 diff --git a/res/eye3.png b/res/eye3.png new file mode 100644 index 0000000000000000000000000000000000000000..5cd2e1d4fa25a9d58a8d7d9a9863b2d732215459 GIT binary patch literal 6734 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⪙zZ{5fyfQXH9+j?V@VeR?RG5uP2$mmuM3!7cdOdz=+9a}jOb%|t*f_b zY-DGPeA$}$R8S1utjNdkK<}%D>ImTK&uV{;ko!gXZ_oLuk@fi7g1Y-gk`kd*?{$Yk zbSZOaADHE7hJZh|j)!Bt_`FV->;Xt%sV(xZlz+x_@}7M<6dJ@nfm^PYMEw&Z3{-{Y z<(E6X!rX9V?kOgm@6R!}ykBhmT+2p5p7N7G7#Ib~^Yi<Rn^49RI9TnpUgiWu7gfAF zm-FP6x$!08`dDlf<U?j|$lj!@Q_JvqFI2?@Oit9`?dYqlz*lC#Uh#&XEPX(swoE>Z z==#Wew&M_pKK4`;%W=Q`e05gft^XZ!ffsa5ryq(7P$h^AgRs@GiT^BJOT{hKQuSd< z?X|OpnL?d+=Bmx)*SVg@KquKHx=MtmC;OHqJiahBZuONjyc|o%xH$EWwumPG?`q%E zo|A8wN@y^6J`<n-)erDG|HW+xqbL&K>{d68Z}}IlUiv*moeG<GYhB$J&o$0~j#rr* zh-Ck$IQLC0jgKX=n(vana$ntFE1#>;c|{tB)493?88i(lz&QP^$v>N|d|kb*6?*3) z8X`;QUF-a52U;CI)#`C1UFf{hAu$PH(?d~mkJ#&lno=X(UXCTgpjv#w>CRki?q7$% zC{R$BNs01$HqEu}>p&mov^jUQyg|B-)+mGx8abFxRrRZk)e2A)6v&r8g#8^OB5k_& zS(6L_Aiq6Aa2zHLrnLeRhmZll^q3Wm9EF&hV1WJX!~Rz1Dg&Htuik!2yiP|P%n77` zVNUD;)+<%~fP{6bw)h{v&G&i!cC>bwm3O#tg0)NWX01W1_5hi>o3HcqPh?lg#NkG< z18-7h>`@?*xRN$zhywYRV*la?Ju@$~nnA4X#P!HJ(*VCoRq`3|Y2W~N+F^188)qv~ z>5x8IkgWm<$NK5}KfV|ucnI5LC5x{*ZG0JD0X8JS4rO|^s*Yx(c&Y;=D^OpM5PESf z(zy}Cm0@Q^?!umQqW_zY^mKm-AxYH#gRJP)lMxN9+bL_Zt>zyhRGmP-l(>qNe|h_^ zu`UinJa7Uk%b)C|!7P!3>sB9Vx4FWlDXo=f3uZ*CFK19GUMNbkElYF=&wzXCq`a&t zF>?s**(3$5g?~E?iedu^eGL?Jd2s#(N^;~xs!mQ;w$c5{44K;DVt&^r+`^)aEx>WY zY#r-I`M@jF=yLq7%pb(HcLKQhN-YGgE)PfF=;iwkwXiAY|3_dtq#=T~rrcORqowdr z$JuQ2qu}uf-U95g;}a0B;|Y%d_*yuWYXP+Wv9e`_H9Rb;V?0~~qEBGo_YI?PPkDL- zRGIc%bK79b@Fd6<5pg?$n$l1EP&7*xw|h?kEhk_0@?@R@0&8GtV^t<YQo72YP>BL{ zAarW@ta*$_*PFM{Fgan*v^I9-+ArX_@o>{RBe95uzjMDDLfWbBLklc|;6C3UrWLh5 z{xo>cI*8312>U6>Lg1S6spojis}t}KHQ2ROkWFbwu#DeC2{i|T?Frz4Kd70+a(U9q zydrT+p@o^&j_eL9ITyT%ZyU*q2oS+jeNnxoOC>u^22}kbrxSBm>0v5SH^x_fEjeod zI-?dv-(iq8D`q&A*N30v_@-uMQj;N!+mALUyX#mTxTkA%f;3y{Kel6C@y~E>q6oT+ zO#9f}`0;qPJ0QY1Ldrt`pqL=uKu|G)&-LF+$Ts?4(?9Y{68~strM)8@t1QPE<$)Ij zWsqYXSK!^^18(Q%zl(Oc4eqFs7Ry-ZXjvc71^kFOs4WN>Wj!Je>shMm(6mPwp}B}S ksbB1I)cyafO3(wojB;>x{55gHBTj^+qM(VWk~2sBA6w*r^#A|> literal 0 HcmV?d00001 diff --git a/res/eyec1.png b/res/eyec1.png new file mode 100644 index 0000000000000000000000000000000000000000..66f5cfeee145056638b7d85135793f66533c8cca GIT binary patch literal 5325 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 literal 0 HcmV?d00001 diff --git a/res/eyesOpen.png b/res/eyesOpen.png new file mode 100644 index 0000000000000000000000000000000000000000..8e50834912db47b271aa1efa265970030a37dd25 GIT binary patch literal 7673 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 P-B*gTYBE()=E4611vtp^ literal 0 HcmV?d00001 diff --git a/res/eyesOpen1.png b/res/eyesOpen1.png new file mode 100644 index 0000000000000000000000000000000000000000..01c41839f8172463f3d0480e0c06649ac778dc33 GIT binary patch literal 8320 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 JHPYsx{{xh$)uR9a literal 0 HcmV?d00001