如果程序已最大化,我将其最小化,然后单击回到程序,它是否处于窗口模式?

if the program is maximized and I minimize it and then click back to the program it is in windowed mode?

我的程序在 默认情况下以 windowed 模式启动
我的问题是,如果我 启动它 然后 按最大化 ,然后 最小化 然后 在任务栏中单击它,它处于window编辑模式并且未最大化

老实说,我制作了这个全新的 window 因为我喜欢设计清晰的程序。我不知道你能不能改变一个普通的Window的顶部,比如关闭按钮的图标或者它的颜色。

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 **************************************************/
/***********************************************************************************************************/

这里有一个解决这个问题的 hacky 方法: 将 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

说明:保存你的window在你最小化之前的状态,然后在恢复时恢复到save_state

我不知道有什么更干净的方法,但应该这样做 :)