Browse Source

Initial commit

Done with main menu & gui fancy view ^_^
Ivan Arkhipov 5 years ago
parent
commit
da403c7210
8 changed files with 762 additions and 0 deletions
  1. 41 0
      Legacy_v2.pro
  2. 31 0
      clickablelabel.cpp
  3. 29 0
      clickablelabel.h
  4. 11 0
      main.cpp
  5. 133 0
      mainwindow.cpp
  6. 49 0
      mainwindow.h
  7. 463 0
      mainwindow.ui
  8. 5 0
      res.qrc

+ 41 - 0
Legacy_v2.pro

@@ -0,0 +1,41 @@
+#-------------------------------------------------
+#
+# Project created by QtCreator 2018-07-12T19:45:49
+#
+#-------------------------------------------------
+
+QT       += core gui
+
+QMAKE_LFLAGS_RELEASE += -static -static-libgcc -static-libstdc++
+
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+TARGET = Legacy_v2
+TEMPLATE = app
+
+# The following define makes your compiler emit warnings if you use
+# any feature of Qt which has been marked as deprecated (the exact warnings
+# depend on your compiler). Please consult the documentation of the
+# deprecated API in order to know how to port your code away from it.
+DEFINES += QT_DEPRECATED_WARNINGS
+
+# You can also make your code fail to compile if you use deprecated APIs.
+# In order to do so, uncomment the following line.
+# You can also select to disable deprecated APIs only up to a certain version of Qt.
+#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
+
+
+SOURCES += \
+        main.cpp \
+        mainwindow.cpp \
+    clickablelabel.cpp
+
+HEADERS += \
+        mainwindow.h \
+    clickablelabel.h
+
+FORMS += \
+        mainwindow.ui
+
+RESOURCES += \
+    res.qrc

+ 31 - 0
clickablelabel.cpp

@@ -0,0 +1,31 @@
+#include "clickablelabel.h"
+#include <QDebug>
+
+ClickableLabel *ClickableLabel::active_label = nullptr;
+
+ClickableLabel::ClickableLabel(QWidget* parent, Qt::WindowFlags)
+    : QLabel(parent) {
+
+}
+
+ClickableLabel::~ClickableLabel() {}
+
+ClickableLabel *ClickableLabel::getActiveLabel()
+{
+    return active_label;
+}
+
+void ClickableLabel::mousePressEvent(QMouseEvent* event) {
+    event->accept();
+    emit clicked();
+}
+
+void ClickableLabel::mouseMoveEvent(QMouseEvent *)
+{
+    if (active_label != this) {
+        qDebug() << "Entered " << objectName() << "\n";
+        active_label = this;
+        qDebug() << size();
+        emit active_label_changed();
+    }
+}

+ 29 - 0
clickablelabel.h

@@ -0,0 +1,29 @@
+#ifndef CLICKABLELABEL_H
+#define CLICKABLELABEL_H
+
+#include <QObject>
+#include <QWidget>
+#include <QLabel>
+#include <QMouseEvent>
+
+class ClickableLabel : public QLabel {
+    Q_OBJECT
+
+public:
+    explicit ClickableLabel(QWidget* parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags());
+    ~ClickableLabel();
+    static ClickableLabel *getActiveLabel();
+
+signals:
+    void clicked();
+    void active_label_changed();
+
+protected:
+    void mousePressEvent(QMouseEvent* event);
+    void mouseMoveEvent(QMouseEvent *event) override;
+
+private:
+    static ClickableLabel *active_label;
+};
+
+#endif // CLICKABLELABEL_H

+ 11 - 0
main.cpp

@@ -0,0 +1,11 @@
+#include "mainwindow.h"
+#include <QApplication>
+
+int main(int argc, char *argv[])
+{
+    QApplication a(argc, argv);
+    MainWindow w;
+    w.show();
+
+    return a.exec();
+}

+ 133 - 0
mainwindow.cpp

@@ -0,0 +1,133 @@
+#include "mainwindow.h"
+#include "ui_mainwindow.h"
+
+#include <QBitmap>
+#include <QMouseEvent>
+#include <QMessageBox>
+#include <QDesktopWidget>
+#include <QDebug>
+
+MainWindow::MainWindow(QWidget *parent) :
+    QMainWindow(parent, Qt::Window | Qt::FramelessWindowHint),
+    ui(new Ui::MainWindow), menuHoverWidget(nullptr), menuHoverWidgetAnimation(nullptr)
+{
+    ui->setupUi(this);
+
+    QPixmap maskPix;
+    maskPix.fill(":/assets/bg1.png");
+    maskPix = maskPix.scaled(width(), height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
+    setMask(maskPix.mask());
+    menuHoverWidget = new QWidget(ui->menu_widget);
+    menuHoverWidget->setStyleSheet("background-color: rgba(55, 37, 31, 250);");
+    menuHoverWidget->resize(0, 0);
+
+    connect(ui->menuentry_1, &ClickableLabel::active_label_changed, this, &MainWindow::on_active_menuentry_changed);
+    connect(ui->menuentry_2, &ClickableLabel::active_label_changed, this, &MainWindow::on_active_menuentry_changed);
+    connect(ui->menuentry_3, &ClickableLabel::active_label_changed, this, &MainWindow::on_active_menuentry_changed);
+    connect(ui->menuentry_4, &ClickableLabel::active_label_changed, this, &MainWindow::on_active_menuentry_changed);
+    connect(ui->menuentry_5, &ClickableLabel::active_label_changed, this, &MainWindow::on_active_menuentry_changed);
+    connect(ui->menuentry_6, &ClickableLabel::active_label_changed, this, &MainWindow::on_active_menuentry_changed);
+}
+
+void MainWindow::mousePressEvent(QMouseEvent *event)
+{
+    if (event->button() == Qt::LeftButton) {
+        dragPosition = event->globalPos() - frameGeometry().topLeft();
+        event->accept();
+    }
+}
+
+void MainWindow::mouseMoveEvent(QMouseEvent *event)
+{
+    if (event->buttons() & Qt::LeftButton) {
+        move(event->globalPos() - dragPosition);
+        event->accept();
+    }
+}
+
+void MainWindow::resizeEvent(QResizeEvent * /* event */)
+{
+    QPixmap maskPix(":/assets/bg1.png");
+    maskPix = maskPix.scaled(width(), height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
+    setMask(maskPix.mask());
+}
+
+MainWindow::~MainWindow()
+{
+    delete ui;
+}
+
+void MainWindow::on_menuentry_1_clicked()
+{
+    QMessageBox msgBox;
+    msgBox.setIcon(QMessageBox::Information);
+    msgBox.setText("Нажали на \"Статус\"!");
+    msgBox.exec();
+}
+
+void MainWindow::on_menuentry_2_clicked()
+{
+    QMessageBox msgBox;
+    msgBox.setIcon(QMessageBox::Information);
+    msgBox.setText("Нажали на \"Настройки\"!");
+    msgBox.exec();
+}
+
+void MainWindow::on_menuentry_3_clicked()
+{
+    QMessageBox msgBox;
+    msgBox.setIcon(QMessageBox::Information);
+    msgBox.setText("Нажали на \"Русификация\"!");
+    msgBox.exec();
+}
+
+void MainWindow::on_menuentry_4_clicked()
+{
+    QMessageBox msgBox;
+    msgBox.setIcon(QMessageBox::Information);
+    msgBox.setText("Нажали на \"Новости\"!");
+    msgBox.exec();
+}
+
+void MainWindow::on_menuentry_5_clicked()
+{
+    QMessageBox msgBox;
+    msgBox.setIcon(QMessageBox::Information);
+    msgBox.setText("Нажали на \"Помощь\"!");
+    msgBox.exec();
+}
+
+void MainWindow::on_menuentry_6_clicked()
+{
+    QMessageBox msgBox;
+    msgBox.setIcon(QMessageBox::Information);
+    msgBox.setText("Нажали на \"О нас\"!");
+    msgBox.exec();
+}
+
+void MainWindow::on_active_menuentry_changed()
+{
+    ClickableLabel* active_label = ClickableLabel::getActiveLabel();
+
+    if (menuHoverWidget->size() == QSize(0, 0)) {
+        menuHoverWidget->resize(active_label->size() + QSize(10, 0));
+        menuHoverWidget->move(active_label->pos() + QPoint(-5, 0));
+    }
+
+    if (menuHoverWidgetAnimation == nullptr)
+        menuHoverWidgetAnimation = new QPropertyAnimation(menuHoverWidget, "geometry");
+    else
+        menuHoverWidgetAnimation->stop();
+
+    menuHoverWidgetAnimation->setDuration(200);
+    menuHoverWidgetAnimation->setStartValue(QRect(menuHoverWidget->pos(), menuHoverWidget->size()));
+    menuHoverWidgetAnimation->setEndValue(QRect(active_label->pos() + QPoint(-5, 0), active_label->size() + QSize(10, 0)));
+    menuHoverWidgetAnimation->start();
+
+    ui->menuentry_1->raise();
+    ui->menuentry_2->raise();
+    ui->menuentry_3->raise();
+    ui->menuentry_4->raise();
+    ui->menuentry_5->raise();
+    ui->menuentry_6->raise();
+}

+ 49 - 0
mainwindow.h

@@ -0,0 +1,49 @@
+#ifndef MAINWINDOW_H
+#define MAINWINDOW_H
+
+#include <QMainWindow>
+#include <QPropertyAnimation>
+
+namespace Ui {
+class MainWindow;
+}
+
+class MainWindow : public QMainWindow
+{
+    Q_OBJECT
+
+public:
+    explicit MainWindow(QWidget *parent = 0);
+    ~MainWindow();
+
+protected:
+    void mouseMoveEvent(QMouseEvent *event) override;
+    void mousePressEvent(QMouseEvent *event) override;
+    void resizeEvent(QResizeEvent *event) override;
+
+private slots:
+    void on_menuentry_1_clicked();
+
+    void on_menuentry_2_clicked();
+
+    void on_menuentry_3_clicked();
+
+    void on_menuentry_4_clicked();
+
+    void on_menuentry_5_clicked();
+
+    void on_menuentry_6_clicked();
+
+    void on_active_menuentry_changed();
+
+private:
+    Ui::MainWindow *ui;
+
+    QWidget* menuHoverWidget;
+    QPropertyAnimation* menuHoverWidgetAnimation;
+    QPropertyAnimation* menuHoverWidgetScaleAnimation;
+
+    QPoint dragPosition;
+};
+
+#endif // MAINWINDOW_H

+ 463 - 0
mainwindow.ui

@@ -0,0 +1,463 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>MainWindow</class>
+ <widget class="QMainWindow" name="MainWindow">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>900</width>
+    <height>650</height>
+   </rect>
+  </property>
+  <property name="sizePolicy">
+   <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+    <horstretch>0</horstretch>
+    <verstretch>0</verstretch>
+   </sizepolicy>
+  </property>
+  <property name="minimumSize">
+   <size>
+    <width>800</width>
+    <height>600</height>
+   </size>
+  </property>
+  <property name="windowTitle">
+   <string>MainWindow</string>
+  </property>
+  <property name="autoFillBackground">
+   <bool>false</bool>
+  </property>
+  <property name="styleSheet">
+   <string notr="true"/>
+  </property>
+  <property name="animated">
+   <bool>false</bool>
+  </property>
+  <property name="tabShape">
+   <enum>QTabWidget::Triangular</enum>
+  </property>
+  <widget class="QWidget" name="centralWidget">
+   <property name="sizePolicy">
+    <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+     <horstretch>0</horstretch>
+     <verstretch>0</verstretch>
+    </sizepolicy>
+   </property>
+   <property name="autoFillBackground">
+    <bool>false</bool>
+   </property>
+   <property name="styleSheet">
+    <string notr="true">border-image: url(:/assets/bg1.png);
+
+</string>
+   </property>
+   <layout class="QGridLayout" name="gridLayout" rowstretch="1,4" columnstretch="1,2">
+    <property name="sizeConstraint">
+     <enum>QLayout::SetDefaultConstraint</enum>
+    </property>
+    <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">
+     <widget class="QWidget" name="logo_area" native="true">
+      <property name="sizePolicy">
+       <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+        <horstretch>0</horstretch>
+        <verstretch>0</verstretch>
+       </sizepolicy>
+      </property>
+      <property name="minimumSize">
+       <size>
+        <width>300</width>
+        <height>120</height>
+       </size>
+      </property>
+      <property name="autoFillBackground">
+       <bool>false</bool>
+      </property>
+      <property name="styleSheet">
+       <string notr="true">border-image:none;</string>
+      </property>
+     </widget>
+    </item>
+    <item row="0" column="1">
+     <widget class="QWidget" name="menu_area" native="true">
+      <property name="styleSheet">
+       <string notr="true">border-image:none;</string>
+      </property>
+      <layout class="QVBoxLayout" name="verticalLayout" stretch="10,9,7">
+       <property name="spacing">
+        <number>0</number>
+       </property>
+       <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>
+       <item>
+        <spacer name="verticalSpacer">
+         <property name="orientation">
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>20</width>
+           <height>52</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+       <item>
+        <widget class="QWidget" name="menu_widget" native="true">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="autoFillBackground">
+          <bool>false</bool>
+         </property>
+         <property name="styleSheet">
+          <string notr="true"/>
+         </property>
+         <layout class="QHBoxLayout" name="horizontalLayout" stretch="6,9,11,7,6,5,0,2">
+          <property name="spacing">
+           <number>10</number>
+          </property>
+          <property name="sizeConstraint">
+           <enum>QLayout::SetDefaultConstraint</enum>
+          </property>
+          <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>
+          <item>
+           <widget class="ClickableLabel" name="menuentry_1">
+            <property name="sizePolicy">
+             <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+              <horstretch>0</horstretch>
+              <verstretch>0</verstretch>
+             </sizepolicy>
+            </property>
+            <property name="baseSize">
+             <size>
+              <width>0</width>
+              <height>0</height>
+             </size>
+            </property>
+            <property name="mouseTracking">
+             <bool>true</bool>
+            </property>
+            <property name="layoutDirection">
+             <enum>Qt::LeftToRight</enum>
+            </property>
+            <property name="styleSheet">
+             <string notr="true">color:rgb(255, 255, 255);
+font: 15px &quot;Trebuchet MS&quot;;</string>
+            </property>
+            <property name="text">
+             <string>СТАТУС</string>
+            </property>
+            <property name="default" stdset="0">
+             <bool>false</bool>
+            </property>
+            <property name="flat" stdset="0">
+             <bool>true</bool>
+            </property>
+           </widget>
+          </item>
+          <item>
+           <widget class="ClickableLabel" name="menuentry_2">
+            <property name="enabled">
+             <bool>true</bool>
+            </property>
+            <property name="sizePolicy">
+             <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+              <horstretch>0</horstretch>
+              <verstretch>0</verstretch>
+             </sizepolicy>
+            </property>
+            <property name="mouseTracking">
+             <bool>true</bool>
+            </property>
+            <property name="styleSheet">
+             <string notr="true">color:rgb(255, 255, 255);
+font: 15px &quot;Trebuchet MS&quot;;</string>
+            </property>
+            <property name="text">
+             <string>НАСТРОЙКИ</string>
+            </property>
+            <property name="flat" stdset="0">
+             <bool>true</bool>
+            </property>
+           </widget>
+          </item>
+          <item>
+           <widget class="ClickableLabel" name="menuentry_3">
+            <property name="sizePolicy">
+             <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+              <horstretch>0</horstretch>
+              <verstretch>0</verstretch>
+             </sizepolicy>
+            </property>
+            <property name="minimumSize">
+             <size>
+              <width>0</width>
+              <height>0</height>
+             </size>
+            </property>
+            <property name="mouseTracking">
+             <bool>true</bool>
+            </property>
+            <property name="styleSheet">
+             <string notr="true">color:rgb(255, 255, 255);
+font: 15px &quot;Trebuchet MS&quot;;</string>
+            </property>
+            <property name="text">
+             <string notr="true">РУСИФИКАЦИЯ</string>
+            </property>
+            <property name="flat" stdset="0">
+             <bool>true</bool>
+            </property>
+           </widget>
+          </item>
+          <item>
+           <widget class="ClickableLabel" name="menuentry_4">
+            <property name="sizePolicy">
+             <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+              <horstretch>0</horstretch>
+              <verstretch>0</verstretch>
+             </sizepolicy>
+            </property>
+            <property name="minimumSize">
+             <size>
+              <width>0</width>
+              <height>0</height>
+             </size>
+            </property>
+            <property name="mouseTracking">
+             <bool>true</bool>
+            </property>
+            <property name="styleSheet">
+             <string notr="true">color:rgb(255, 255, 255);
+font: 15px &quot;Trebuchet MS&quot;;</string>
+            </property>
+            <property name="text">
+             <string>НОВОСТИ</string>
+            </property>
+            <property name="flat" stdset="0">
+             <bool>true</bool>
+            </property>
+           </widget>
+          </item>
+          <item>
+           <widget class="ClickableLabel" name="menuentry_5">
+            <property name="sizePolicy">
+             <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+              <horstretch>0</horstretch>
+              <verstretch>0</verstretch>
+             </sizepolicy>
+            </property>
+            <property name="minimumSize">
+             <size>
+              <width>0</width>
+              <height>0</height>
+             </size>
+            </property>
+            <property name="mouseTracking">
+             <bool>true</bool>
+            </property>
+            <property name="layoutDirection">
+             <enum>Qt::LeftToRight</enum>
+            </property>
+            <property name="styleSheet">
+             <string notr="true">color:rgb(255, 255, 255);
+font: 15px &quot;Trebuchet MS&quot;;</string>
+            </property>
+            <property name="text">
+             <string>ПОМОЩЬ</string>
+            </property>
+            <property name="flat" stdset="0">
+             <bool>true</bool>
+            </property>
+           </widget>
+          </item>
+          <item>
+           <widget class="ClickableLabel" name="menuentry_6">
+            <property name="sizePolicy">
+             <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+              <horstretch>0</horstretch>
+              <verstretch>0</verstretch>
+             </sizepolicy>
+            </property>
+            <property name="minimumSize">
+             <size>
+              <width>0</width>
+              <height>0</height>
+             </size>
+            </property>
+            <property name="sizeIncrement">
+             <size>
+              <width>0</width>
+              <height>0</height>
+             </size>
+            </property>
+            <property name="baseSize">
+             <size>
+              <width>50</width>
+              <height>0</height>
+             </size>
+            </property>
+            <property name="mouseTracking">
+             <bool>true</bool>
+            </property>
+            <property name="styleSheet">
+             <string notr="true">color:rgb(255, 255, 255);
+font: 15px &quot;Trebuchet MS&quot;;</string>
+            </property>
+            <property name="text">
+             <string>О НАС</string>
+            </property>
+            <property name="autoDefault" stdset="0">
+             <bool>false</bool>
+            </property>
+            <property name="default" stdset="0">
+             <bool>false</bool>
+            </property>
+            <property name="flat" stdset="0">
+             <bool>true</bool>
+            </property>
+           </widget>
+          </item>
+          <item>
+           <widget class="QWidget" name="widget" native="true">
+            <property name="sizePolicy">
+             <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+              <horstretch>0</horstretch>
+              <verstretch>0</verstretch>
+             </sizepolicy>
+            </property>
+            <property name="minimumSize">
+             <size>
+              <width>0</width>
+              <height>0</height>
+             </size>
+            </property>
+            <layout class="QHBoxLayout" name="horizontalLayout_2">
+             <property name="spacing">
+              <number>5</number>
+             </property>
+             <property name="leftMargin">
+              <number>0</number>
+             </property>
+             <property name="topMargin">
+              <number>0</number>
+             </property>
+             <property name="rightMargin">
+              <number>30</number>
+             </property>
+             <property name="bottomMargin">
+              <number>0</number>
+             </property>
+             <item>
+              <widget class="QPushButton" name="pushButton_2">
+               <property name="text">
+                <string>_</string>
+               </property>
+              </widget>
+             </item>
+             <item>
+              <widget class="QPushButton" name="pushButton">
+               <property name="text">
+                <string>Х</string>
+               </property>
+              </widget>
+             </item>
+            </layout>
+           </widget>
+          </item>
+          <item>
+           <spacer name="horizontalSpacer">
+            <property name="orientation">
+             <enum>Qt::Horizontal</enum>
+            </property>
+            <property name="sizeHint" stdset="0">
+             <size>
+              <width>40</width>
+              <height>20</height>
+             </size>
+            </property>
+           </spacer>
+          </item>
+         </layout>
+        </widget>
+       </item>
+       <item>
+        <spacer name="verticalSpacer_2">
+         <property name="orientation">
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>20</width>
+           <height>45</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+      </layout>
+     </widget>
+    </item>
+    <item row="1" column="0" colspan="2">
+     <widget class="QWidget" name="content_area" native="true">
+      <property name="autoFillBackground">
+       <bool>false</bool>
+      </property>
+      <property name="styleSheet">
+       <string notr="true">border-image:none;</string>
+      </property>
+     </widget>
+    </item>
+   </layout>
+  </widget>
+ </widget>
+ <layoutdefault spacing="6" margin="11"/>
+ <customwidgets>
+  <customwidget>
+   <class>ClickableLabel</class>
+   <extends>QLabel</extends>
+   <header>clickablelabel.h</header>
+  </customwidget>
+ </customwidgets>
+ <resources/>
+ <connections/>
+</ui>

+ 5 - 0
res.qrc

@@ -0,0 +1,5 @@
+<RCC>
+    <qresource prefix="/">
+        <file>assets/bg1.png</file>
+    </qresource>
+</RCC>