если программа развернута, и я минимизирую ее, а затем снова нажмите на программу, она находится в оконном режиме? - PullRequest
1 голос
/ 16 марта 2019

Моя программа запускается по умолчанию в оконном режиме .
Моя проблема в том, что если я запускаю , а затем нажимаю на максимизации , затем при сворачивании , а затем щелкните его на панели задач , он находится в оконном режиме и не развернуто .

Если честно, я сделал это новое окно, потому что мне нравятся программы, которые имеют хороший четкий дизайн.Я не знаю, можно ли изменить верхнюю часть обычного окна, например, значок кнопки закрытия или ее цвет.

main.qml:

    /***********************************************************************************************************/
    /*********************************************** S T A R T *************************************************/
    /***********************************************************************************************************/

    import QtQuick 2.12
    import QtQuick.Window 2.12
    import QtQuick.Controls 2.5
    import QtQuick.Layouts 1.3
    import QtGraphicalEffects 1.0
    import QtQuick.Controls.Universal 2.0
    import QtQuick.Controls.Imagine 2.3
    import QtQuick.Controls.Material 2.0
    import QtQuick.Dialogs.qml 1.0
    import QtQuick.Extras 1.4
    import QtQuick.Templates 2.5
    import QtQuick.LocalStorage 2.0


    ApplicationWindow {

    id: mainWindow
    visible: true
    width: 900
    height: 600
    title: qsTr("Test")
    color: "#2F3136"
    flags: Qt.Window | Qt.FramelessWindowHint

    property int _max: 0
    property int _min: 0
    property int _resizeRightVar: 0
    property int _resizeLeftVar: 0
    property int _resizeTopVar: 0
    property int _resizeBottomVar: 0
    property bool _resizeRight: true
    property bool _resizeLeft: true
    property bool _resizeTop: true
    property bool _resizeBottom: true
    property int _rRCursor: Qt.SizeHorCursor
    property int _rLCursor: Qt.SizeHorCursor
    property int _rTCursor: Qt.SizeVerCursor
    property int _rBCursor: Qt.SizeVerCursor
    property bool _moveWindow: true


    property int previousX
    property int previousY



    ///////////////////////////////////////////////////////////
    /// TOP RECTANGLE WITH TITLE, MINIMIZE, MAXIMIZE, CLOSE ///
    ///////////////////////////////////////////////////////////
    Rectangle {
        id: rectangle
           width: parent.width
           height: 23
           color: "#202225"
           anchors.top: parent.top

           //////////////////////////////////
           /// TITLE IN THE TOP RECTANGLE ///
           //////////////////////////////////
           Text {
               leftPadding: 6
               topPadding: 1
               opacity: 0.75
               text: mainWindow.title
               font.pixelSize: 14
               font.family: "Dodge"
               color: "white"
           }

           ///////////////////////////////////////
           /// MOUSE AREA IN THE TOP RECTANGLE ///
           ///////////////////////////////////////
           MouseArea {
               anchors.fill: parent
               enabled: mainWindow._moveWindow

               onPressed: {
                   previousX = mouseX
                   previousY = mouseY
               }

               onMouseXChanged: {
                   var dx = mouseX - previousX
                   mainWindow.setX(mainWindow.x + dx)
               }

               onMouseYChanged: {
                   var dy = mouseY - previousY
                   mainWindow.setY(mainWindow.y + dy)
               }

               onDoubleClicked: {
                   //mainWindow.visibility = "Maximized"

                   mainWindow._max ++

                   if(mainWindow._max == 1){
                       mainWindow.visibility = "Maximized"
                       //mainWindow.showMaximized()

                       mainWindow._moveWindow = false

                       mainWindow._rRCursor = Qt.ArrowCursor
                       mainWindow._rLCursor = Qt.ArrowCursor
                       mainWindow._rTCursor = Qt.ArrowCursor
                       mainWindow._rBCursor = Qt.ArrowCursor

                       mainWindow._resizeRight = false
                       mainWindow._resizeLeft = false
                       mainWindow._resizeTop = false
                       mainWindow._resizeBottom = false


                   } else if(mainWindow._max == 2){
                       mainWindow.visibility = "Windowed"
                       //mainWindow.showNormal()
                       mainWindow._max = 0

                       mainWindow._moveWindow = true

                       mainWindow._rRCursor = Qt.SizeHorCursor
                       mainWindow._rLCursor = Qt.SizeHorCursor
                       mainWindow._rTCursor = Qt.SizeVerCursor
                       mainWindow._rBCursor = Qt.SizeVerCursor

                       mainWindow._resizeRight = true
                       mainWindow._resizeLeft = true
                       mainWindow._resizeTop = true
                       mainWindow._resizeBottom = true


                   }

               }

           }


           /////////////////////////////////////////
           /// CLOSE BUTTON IN THE TOP RECTANGLE ///
           /////////////////////////////////////////
           Rectangle {
               id: close_window
               width: 27
               height: 22.5
               anchors.top: parent.top
               anchors.topMargin: 0
               anchors.right: parent.right
               anchors.rightMargin: 0
               color: "#202225"

               Image {
                   id: closeImage
                   source: "close_window.png"
                   anchors.fill: parent
                   opacity: 0.6
                   fillMode: Image.PreserveAspectFit
               }

               MouseArea {
                   id: close_windowMouseArea
                   anchors.fill: parent
                   hoverEnabled: true

                   cursorShape: Qt.PointingHandCursor

                   onClicked: {
                       mainWindow.close()
                   }
                   onEntered: {
                       cursorShape: Qt.PointingHandCursor
                       close_window.color = "#F04747"
                       closeImage.opacity = 1
                   }
                   onExited: {
                       cursorShape: Qt.ArrowCursor
                       close_window.color = "#202225"
                       closeImage.opacity = 0.6
                   }
               }
           }


           ////////////////////////////////////////////
           /// MAXIMIZE BUTTON IN THE TOP RECTANGLE ///
           ////////////////////////////////////////////
           Rectangle {
               id: maximize_window
               width: 27
               height: 22.5
               anchors.top: parent.top
               anchors.topMargin: 0
               anchors.right: parent.right
               anchors.rightMargin: 29
               color: "#202225"

               Image {
                   id: maximizeImage
                   source: "maximize_window.png"
                   anchors.fill: parent
                   opacity: 0.6
                   fillMode: Image.PreserveAspectFit
               }

               MouseArea {
                   id: maximize_windowMouseArea
                   anchors.fill: parent
                   hoverEnabled: true

                   cursorShape: Qt.PointingHandCursor

                   onClicked: {

                       mainWindow._max ++

                       if(mainWindow._max == 1){
                           mainWindow.visibility = "Maximized"
                           //mainWindow.showMaximized()

                           mainWindow._moveWindow = false

                           mainWindow._rRCursor = Qt.ArrowCursor
                           mainWindow._rLCursor = Qt.ArrowCursor
                           mainWindow._rTCursor = Qt.ArrowCursor
                           mainWindow._rBCursor = Qt.ArrowCursor

                           mainWindow._resizeRight = false
                           mainWindow._resizeLeft = false
                           mainWindow._resizeTop = false
                           mainWindow._resizeBottom = false


                       } else if(mainWindow._max == 2){
                           mainWindow.visibility = "Windowed"
                           //mainWindow.showNormal()
                           mainWindow._max = 0

                           mainWindow._moveWindow = true

                           mainWindow._rRCursor = Qt.SizeHorCursor
                           mainWindow._rLCursor = Qt.SizeHorCursor
                           mainWindow._rTCursor = Qt.SizeVerCursor
                           mainWindow._rBCursor = Qt.SizeVerCursor

                           mainWindow._resizeRight = true
                           mainWindow._resizeLeft = true
                           mainWindow._resizeTop = true
                           mainWindow._resizeBottom = true


                       }

                   }
                   onEntered: {
                       maximize_window.color = "#2B2D30"
                       maximizeImage.opacity = 1
                   }
                   onExited: {
                       maximize_window.color = "#202225"
                       maximizeImage.opacity = 0.6
                   }
               }
           }


           ////////////////////////////////////////////
           /// MINIMIZE BUTTON IN THE TOP RECTANGLE ///
           ////////////////////////////////////////////
           Rectangle {
               id: minimize_window
               width: 27
               height: 22.5
               anchors.top: parent.top
               anchors.topMargin: 0
               anchors.right: parent.right
               anchors.rightMargin: 57
               color: "#202225"

               Image {
                   id: minimizeImage
                   source: "minimize_window.png"
                   anchors.fill: parent
                   opacity: 0.6
                   fillMode: Image.PreserveAspectFit
               }

               MouseArea {
                   id: minimize_windowMouseArea
                   anchors.fill: parent
                   hoverEnabled: true

                   cursorShape: Qt.PointingHandCursor

                   onClicked: {

                       mainWindow._min ++

                       if(mainWindow._min >= 1){
                           mainWindow._min = 0
                           //mainWindow.showMinimized()
                           mainWindow.visibility = "Minimized"

                           //if(mainWindow._max == 1){
                           //    mainWindow.showMaximized()
                           //    mainWindow.visibility = "Maximized"
                           //}
                       }

                   }
                   onEntered: {
                       minimize_window.color = "#2B2D30"
                       minimizeImage.opacity = 1
                   }
                   onExited: {
                       minimize_window.color = "#202225"
                       minimizeImage.opacity = 0.6
                   }
               }
           }
       }



       ///////////////////////////
       /// RIGHT RESIZE WINDOW ///
       ///////////////////////////
       MouseArea {
           id: rightResize
           width: 5
           enabled: mainWindow._resizeRight

           cursorShape: mainWindow._rRCursor

           anchors {
               right: parent.right
               top: parent.top
               bottom: parent.bottom
           }

           onEntered: {
               if(mainWindow._resizeRight == true){
                   mainWindow._rRCursor = Qt.SizeHorCursor
               } else if(mainWindow._resizeRight == false){
                   mainWindow._rRCursor = Qt.ArrowCursor
               }
           }

           onPressed: previousX = mouseX

           onMouseXChanged: {
               var dx = mouseX - previousX
               mainWindow.setWidth(parent.width + dx)
           }

       }

       //////////////////////////
       /// LEFT RESIZE WINDOW ///
       //////////////////////////

       MouseArea {
           id: leftResize
           width: 5
           enabled: mainWindow._resizeLeft

           cursorShape: mainWindow._rLCursor

           anchors {
               left: parent.left
               top: parent.top
               bottom: parent.bottom
           }

           onEntered: {
               if(mainWindow._resizeLeft == true){
                   mainWindow._rLCursor = Qt.SizeHorCursor
               } else if(mainWindow._resizeLeft == false){
                   mainWindow._rLCursor = Qt.ArrowCursor
               }
           }

           onPressed: previousX = mouseX

           onMouseXChanged: {
               var dx = mouseX - previousX
               mainWindow.setX(mainWindow.x + dx)
               mainWindow.setWidth(mainWindow.width - dx)
           }

       }

       /////////////////////////
       /// TOP RESIZE WINDOW ///
       /////////////////////////
       MouseArea {
           id: topResize
           height: 5
           enabled: mainWindow._resizeTop

           cursorShape: mainWindow._rTCursor

           anchors {
               top: parent.top
               left: parent.left
               right: parent.right
           }

           onEntered: {
               if(mainWindow._resizeTop == true){
                   mainWindow._rTCursor = Qt.SizeVerCursor
               } else if(mainWindow._resizeTop == false){
                   mainWindow._rTCursor = Qt.ArrowCursor
               }
           }

           onPressed: previousY = mouseY

           onMouseYChanged: {
               var dy = mouseY - previousY
               mainWindow.setY(mainWindow.y + dy)
               mainWindow.setHeight(mainWindow.height - dy)

           }

       }

       ////////////////////////////
       /// BOTTOM RESIZE WINDOW ///
       ////////////////////////////
       MouseArea {
           id: bottomResize
           height: 5
           enabled: mainWindow._resizeBottom

           cursorShape: mainWindow._rBCursor

           anchors {
               bottom: parent.bottom
               left: parent.left
               right: parent.right
           }

           onEntered: {
               if(mainWindow._resizeBottom == true){
                   mainWindow._rBCursor = Qt.SizeVerCursor
               } else if(mainWindow._resizeBottom == false){
                   mainWindow._rBCursor = Qt.ArrowCursor
               }
           }

           onPressed: previousY = mouseY

           onMouseYChanged: {
               var dy = mouseY - previousY
               //mainWindow.setY(mainWindow.y + dy)
               mainWindow.setHeight(mainWindow.height + dy)

           }

       }


       ////////////////////////////
       /// TEXT INPUT IN MIDDLE ///
       ////////////////////////////
       Rectangle{
           id: textInputBG
       }
}

/***********************************************************************************************************/
/************************************************** E N D **************************************************/
/***********************************************************************************************************/

1 Ответ

0 голосов
/ 16 марта 2019

Вот хакерский способ решить эту проблему: добавьте property int saved_state к вашему ApplicationWindow

Затем добавьте следующий код:

onVisibilityChanged: {
    if(saved_state === 4 && visibility === 2) {
        showMaximized()
        saved_state = -1
    }
}

Затем верните свой MouseArea minimize_sindowMouseAreaдобавьте следующую строку:

saved_state = mainWindow.visibility //NEW LINE
mainWindow.visibility = "Minimized" //Existing line

Объяснение: Сохраните состояние вашего окна непосредственно перед свертыванием, а затем восстановите его до save_state после восстановления.

Я не знаюЯ не знаю ни одного более чистого пути, но это должно сделать это:)

...