QML无法隐藏矩形

时间:2016-10-17 08:58:19

标签: c++ qml

我有一个包含我所谓的页面的窗口 - 一个与主窗口大小相同的矩形:

LoginWindow {
    id: loginWindow
}

SelectionWindow {
    id: selectionWindow
}

ServiceWindow {
    id: serviceWindow
}

ConfirmWindow {
    id: confirmWindow
}

IssueWindow {
    id: issueWindow
}

此处的每个*窗口都是继承自Page。

的元素

现在,我可以在设置其可见性的不同Page元素之间跳转。一次只能看到一个页面。最后一页是IssueWindow,从那里我想切换回LoginWindow并注销用户。

从C ++我发出信号issueFinished,在MainWindow我有这个代码:

    onIssueFinished: {
        // This line won't hide the Page
        issueWindow.visible = false;

        loginHandle.logout();
    }

如评论中所述,Page元素不会隐藏,而其他元素会改变其可见性。我正在使用GammaRay来查看更改,一切正常,只是隐藏问题窗口没有。此外,当将issueWindow.visible打印到控制台时,它是错误的。

3 个答案:

答案 0 :(得分:0)

使用opacity代替可见性,并在不透明度更改上绑定一个方法来处理启用和禁用状态,例如。

onIssueFinished: {
        // This line won't hide the Page
        issueWindow.opacity = 0.0;

        loginHandle.logout();
    }

IssueWindow {
    id: issueWindow

    onOpacityChanged: {
        enabled = ( opacity === 1.0)
    }
}

您需要在所有窗口中实现不透明度更改。 并为所有其他窗口设置不透明度。

或者您可以使用stack viewswipe view

答案 1 :(得分:0)

发现问题实际上是切换可见性和触发信号以及响应它们的错误顺序。

答案 2 :(得分:0)

要确保只有一个页面可见,您可以使用索引。 您将可见性设置为:

visible: (selected == thisPageIdentifier)

有了这个,你确定只有具有相应pageIdentifyer的页面可见,你不必抛出多个信号来显示和隐藏。
当一个新页面变得可见时,只需将selected属性设置为相应的标识符(int或string或者是什么),其他页面变为不可见。
如果您决定添加一个新页面,则应该增加可伸缩性,因为您没有新信号可以在所有其他页面中处理。您只需要确保标识符是唯一的。

您的示例代码已调整为:

Item {
    property int selection: 0
    LoginWindow {
        id: loginWindow
        visible: (selection === 0)
    }

    SelectionWindow {
        id: selectionWindow
        visible: (selection === 1)
    }

    ServiceWindow {
        id: serviceWindow
        visible: (selection === 2)
    }

    ConfirmWindow {
        id: confirmWindow
        visible: (selection === 3)
    }

    IssueWindow {
        id: issueWindow
        visible: (selection === 4)
    }
}