diff --git a/CMakeLists.txt b/CMakeLists.txt index 6214ca2..004426b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,7 +16,9 @@ find_package(Qt6 COMPONENTS PrintSupport REQUIRED) -add_executable(StationManager) +add_executable(StationManager + src/resources.qrc +) file(GLOB_RECURSE SOURCES "src/*.cpp") target_sources(StationManager PRIVATE ${SOURCES}) diff --git a/src/main.cpp b/src/main.cpp index 63ffcba..b44de4c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -6,9 +6,13 @@ #include "userinterfaces/windows/mainwindow.h" int main(int argc, char* argv[]) { - QApplication a(argc, argv); - a.setApplicationName("StationManager"); - a.setOrganizationName("Station"); + QApplication application(argc, argv); + application.setApplicationName("StationManager"); + application.setOrganizationName("Station"); + + QFile qss(":/userinterfaces/styles.qss"); + if (qss.open(QFile::ReadOnly)) + application.setStyleSheet(qss.readAll()); if (!Database::instance().initialize()) { QMessageBox::critical(nullptr, "Ошибка", diff --git a/src/resources.qrc b/src/resources.qrc new file mode 100644 index 0000000..94b7769 --- /dev/null +++ b/src/resources.qrc @@ -0,0 +1,5 @@ + + + userinterfaces/styles.qss + + diff --git a/src/userinterfaces/styles.qss b/src/userinterfaces/styles.qss new file mode 100644 index 0000000..09c5c2b --- /dev/null +++ b/src/userinterfaces/styles.qss @@ -0,0 +1,67 @@ +#bannerFrame { + background-color: #721F1E; +} +#bannerFrame QLabel { + color: white; +} +#bannerLogo { + font-size: 64px; +} +#bannerTitle { + font-size: 22px; + font-weight: bold; + line-height: 1.4; +} +#bannerInfo { + color: rgba(255, 255, 255, 0.8); + font-size: 13px; + line-height: 1.5; +} +#bannerVersion { + color: rgba(255, 255, 255, 0.5); + font-size: 11px; +} +#formFrame { + background-color: #f5f5f5; +} +#formTitle { + font-size: 24px; + font-weight: bold; + color: #721F1E; + margin-bottom: 30px; +} +.formLabel { + font-size: 13px; + color: #555; + font-weight: 500; + margin-bottom: 5px; +} +.formInput { + color: #222; + padding: 0 15px; + font-size: 14px; + border: 1px solid #ddd; + border-radius: 0px; + background: white; + min-height: 40px; +} +#messageLabel { + color: #d32f2f; + font-size: 13px; + min-height: 20px; +} +#loginBtn { + background-color: #721F1E; + color: white; + border: none; + border-radius: 0px; + font-size: 15px; + font-weight: 600; + min-height: 45px; +} +#loginBtn:hover { + background-color: #8A2A2A; +} +#loginBtn:pressed { + background-color: #571414; +} \ No newline at end of file diff --git a/src/userinterfaces/windows/loginwindow.cpp b/src/userinterfaces/windows/loginwindow.cpp index dff511a..8cf80e1 100644 --- a/src/userinterfaces/windows/loginwindow.cpp +++ b/src/userinterfaces/windows/loginwindow.cpp @@ -7,38 +7,87 @@ LoginWindow::LoginWindow(QWidget* parent) : QDialog(parent) { setWindowTitle("Авторизация - Система вокзала"); - setFixedSize(400, 280); + setFixedSize(700, 500); setModal(true); - QVBoxLayout* mainLayout = new QVBoxLayout(this); - mainLayout->setSpacing(15); - mainLayout->setContentsMargins(30, 30, 30, 30); + QHBoxLayout* mainLayout = new QHBoxLayout(this); + mainLayout->setSpacing(0); + mainLayout->setContentsMargins(0, 0, 0, 0); - QLabel* titleLabel = new QLabel("Система учета вокзала", this); - titleLabel->setAlignment(Qt::AlignCenter); - titleLabel->setStyleSheet("font-size: 18px; font-weight: bold;"); - mainLayout->addWidget(titleLabel); + m_bannerFrame = new QFrame(this); + m_bannerFrame->setObjectName("bannerFrame"); + m_bannerFrame->setFixedWidth(280); + QVBoxLayout* bannerLayout = new QVBoxLayout(m_bannerFrame); + bannerLayout->setContentsMargins(20, 40, 20, 40); + bannerLayout->setAlignment(Qt::AlignCenter); - QLabel* userLabel = new QLabel("Логин:", this); - m_usernameEdit = new QLineEdit(this); + QLabel* logoIcon = new QLabel("🚂", m_bannerFrame); + logoIcon->setObjectName("bannerLogo"); + logoIcon->setAlignment(Qt::AlignCenter); + bannerLayout->addWidget(logoIcon); + + QLabel* titleBanner = new QLabel("Система учета\nжелезнодорожного\nвокзала", m_bannerFrame); + titleBanner->setObjectName("bannerTitle"); + titleBanner->setAlignment(Qt::AlignCenter); + bannerLayout->addWidget(titleBanner); + + bannerLayout->addSpacing(20); + + bannerLayout->addStretch(); + + QLabel* versionLabel = new QLabel("Версия 0.1", m_bannerFrame); + versionLabel->setObjectName("bannerVersion"); + versionLabel->setAlignment(Qt::AlignCenter); + bannerLayout->addWidget(versionLabel); + + mainLayout->addWidget(m_bannerFrame); + + QFrame* formFrame = new QFrame(this); + formFrame->setObjectName("formFrame"); + QVBoxLayout* formLayout = new QVBoxLayout(formFrame); + formLayout->setContentsMargins(50, 50, 50, 50); + formLayout->setAlignment(Qt::AlignCenter); + + QLabel* formTitle = new QLabel("Вход в систему", formFrame); + formTitle->setObjectName("formTitle"); + formTitle->setAlignment(Qt::AlignCenter); + formLayout->addWidget(formTitle); + + QLabel* userLabel = new QLabel("Логин", formFrame); + userLabel->setObjectName("userLabel"); + userLabel->setProperty("class", "formLabel"); + formLayout->addWidget(userLabel); + + m_usernameEdit = new QLineEdit(formFrame); + m_usernameEdit->setObjectName("usernameEdit"); + m_usernameEdit->setProperty("class", "formInput"); m_usernameEdit->setPlaceholderText("Введите логин"); - mainLayout->addWidget(userLabel); - mainLayout->addWidget(m_usernameEdit); + formLayout->addWidget(m_usernameEdit); + formLayout->addSpacing(15); - QLabel* passLabel = new QLabel("Пароль:", this); - m_passwordEdit = new QLineEdit(this); + QLabel* passLabel = new QLabel("Пароль", formFrame); + passLabel->setObjectName("passLabel"); + passLabel->setProperty("class", "formLabel"); + formLayout->addWidget(passLabel); + + m_passwordEdit = new QLineEdit(formFrame); + m_passwordEdit->setObjectName("passwordEdit"); + m_passwordEdit->setProperty("class", "formInput"); m_passwordEdit->setPlaceholderText("Введите пароль"); m_passwordEdit->setEchoMode(QLineEdit::Password); - mainLayout->addWidget(passLabel); - mainLayout->addWidget(m_passwordEdit); + formLayout->addWidget(m_passwordEdit); + formLayout->addSpacing(15); - m_messageLabel = new QLabel(this); + m_messageLabel = new QLabel(formFrame); + m_messageLabel->setObjectName("messageLabel"); m_messageLabel->setAlignment(Qt::AlignCenter); - m_messageLabel->setStyleSheet("color: red;"); - mainLayout->addWidget(m_messageLabel); + formLayout->addWidget(m_messageLabel); - m_loginBtn = new QPushButton("Войти", this); - mainLayout->addWidget(m_loginBtn); + m_loginBtn = new QPushButton("Войти", formFrame); + m_loginBtn->setObjectName("loginBtn"); + formLayout->addWidget(m_loginBtn); + + mainLayout->addWidget(formFrame); connect(m_loginBtn, &QPushButton::clicked, this, &LoginWindow::onLoginClicked); } @@ -61,4 +110,4 @@ void LoginWindow::onLoginClicked() { m_messageLabel->setText("Неверный логин или пароль!"); m_passwordEdit->clear(); } -} \ No newline at end of file +} diff --git a/src/userinterfaces/windows/loginwindow.h b/src/userinterfaces/windows/loginwindow.h index c98f4bf..e684aff 100644 --- a/src/userinterfaces/windows/loginwindow.h +++ b/src/userinterfaces/windows/loginwindow.h @@ -5,6 +5,8 @@ #include #include #include +#include +#include class LoginWindow : public QDialog { Q_OBJECT @@ -27,6 +29,7 @@ private: QLabel* m_messageLabel; QString m_username; QString m_role; + QFrame* m_bannerFrame; }; #endif