• qml: 多级窗口visible现象;


    多级窗口可以通过动态组件进行实现,也可以通过loader加载。

    然而,在此要注意窗口显示、隐藏的顺序;

    1、当窗口层级为主窗口 - 子窗口A --- 子窗口B;

    这种模式, A是B的父窗口,那么在进行显示时,必须先显示A,在显示B, 同时,在隐藏时,要先隐藏B,在隐藏A,如果先隐藏了A,再隐藏B,就会出现主窗口自动最小化到

    状态栏的现象:

    如果将主窗口传入A内,在动态创建B,同时指定B的父窗口为主窗口,那么在子窗口A关闭,而B隐藏的状态时,会出现B突然又显示出来了,而A正常关闭;

    正确的做法是将A,B作为同级窗口,同时以主窗口作为父窗口,通过信号进行控制两个窗口的相关显示、隐藏关系;

    main.qml

    import QtQuick 2.9
    import QtQuick.Window 2.2
    import QtQuick.Controls 1.3
    Window {
        id: windows;
        visible: true
         640
        height: 480
        title: qsTr("Hello World")
       property var child;
    
        Button{
            id: test;
             70;
            height: 30;
            onClicked: test1.open();
        }
    
        Test1{
            id: test1;
            visible: false;
            onShowTest:{
                child.open();
                this.close();
            }
        }
    
        Connections{
            target: child;
            onGotoPre:{
                test1.open();
                child.close();
            }
        }
    
        Component.onCompleted:{
            var comp = Qt.createComponent("qrc:/TestComp.qml");
            if( comp.status === Component.Ready)
            {
                child = comp.createObject(windows);
            }
        }
    }

    Test1.qml

    import QtQuick 2.0
    import QtQuick.Window 2.2
    import QtQuick.Controls 1.3
    Window {
            id: test;
             300;
            height: 200;
            visible:false;
            signal  showTest();
            property var parentDlg;
    
            Button{
                id: testButton;
                text:"click me";
                onClicked:{
                    showTest();
                }
            }
    
    
    
            function open()
            {
                test.visible = true;
            }
    
            function close()
            {
                test.visible = false;
            }
    
    
    }

    TestComp.qml

    import QtQuick 2.0
    import QtQuick.Window 2.2
    import QtQuick.Controls 1.3
    Window {
            id: testcomp;
             200;
            height: 200;
            signal  gotoPre();
            Column{
                Rectangle{
    
                     100;
                    height: 100;
                    color:"red";
                }
    
                Button{
                     70;
                    height:  30;
                    text: "回到上一页"
                    onClicked:{
                        gotoPre();
                    }
                }
    
            }
    
            function open()
            {
                testcomp.visible = true;
            }
    
            function close()
            {
                testcomp.visible = false;
            }
    }
    

      

  • 相关阅读:
    前端工程化之动态数据代理
    webapp开发之需要知道的css细节
    html-webpack-plugin详解
    file-loader引起的html-webpack-plugin坑
    浅谈react受控组件与非受控组件
    React创建组件的三种方式及其区别
    react项目开发中遇到的问题
    css伪元素:before和:after用法详解
    python之文件操作
    python之range和xrange
  • 原文地址:https://www.cnblogs.com/yinwei-space/p/8919605.html
Copyright © 2020-2023  润新知