QML文本有奇怪的行为?文字没有出现和崩溃的应用程序

时间:2015-06-02 14:25:56

标签: android qt qml qtquick2

我在QML中遇到Text的奇怪行为。我承认这可能是我的错,但我无法弄清楚出了什么问题。我正在创建一个滑动菜单,就像用于Android的Gmail / Inbox应用程序中使用的菜单一样。在回答here时,我发现使用带按钮的滑动菜单的最佳方法是创建我自己的按钮,所以我有以下代码:

MenuButton

Item {
    id: root

    property string text: ""
    signal clicked()

    width: 100
    height: 62

    Rectangle {
        anchors.fill: parent
    }

    Text {
        anchors.centerIn: parent
        text: parent.text
    }

    MouseArea {
        anchors.fill: parent

        onClicked: {
            parent.clicked();
        }
    }
}

我的SliderMenu如下:

Item {
    id: root

    function showMenu(startX, duration) {
        //Start animation to show menu.
    }

    function hideMenu(startX, duration) {
        //Start animation to hide menu.
    }

    clip: true
    visible: false
    Item {
        id: menu

        //shadow adds 1 pixel
        property int maxX: -1
        property int minX: -width - 1
        //Arbitrary number for what is considered fast
        property int fastSwipe: 200

        y: -1
        width: 250
        height: parent.height + 1
        visible: false

        Rectangle {
            id: rectMenu
            anchors.fill: parent
            color: "#ececec"
            visible: false
        }

        DropShadow {
            id: menuShadow
            anchors.fill: rectMenu
            horizontalOffset: 1
            verticalOffset: 0
            radius: 4
            samples: radius * 2
            spread: 0
            color: "#80000000"
            source: rectMenu
            transparentBorder: true
        }

        MenuButton {
            x: 10
            y: 20
            text: "Text"
            onClicked: {
                console.log("I'm here!");
            }
        }

        SwipeArea {
            //Swipe area code
        }

        NumberAnimation {
            //Code of the sliding in animation
        }

        NumberAnimation {
            //Code for the sliding out animation
        }
    }
}

点击TopMenu的{​​{1}}:

即可打开滑块
Button

主要是这样的:

Rectangle {
    id: root
    height: 50
    color: "#4285f4"
    border.width: 0
    border.color: "#00000000"

    property SliderMenu slider

    ToolButton {
        id: slideButton
        x: 5
        y: 7
        width: 36
        height: 36
        iconSource: "../../resources/MainMenu/slide_menu_icon.png"
        onClicked: {
            slider.showMenu();
        }
    }
}

当我按Item { anchors.fill: parent z: 1 TopMenu { x: 0 y: 0 width: parent.width height: 50 slider: sliderMenu } SliderMenu { id: sliderMenu x: 0 y: 0 anchors.fill: parent } } 将菜单滑入视图时,90%的时间(并非总是)应用程序将崩溃。如果我从TopMenu's Button中移除Text,它就不会再崩溃了。另外,我尝试在MenuButton而不是Text的任何位置添加SlideMenu,它会得到相同的结果。

我还试图让MenuButton始终可见(因此我不必按Menu即可显示)并且应用程序不再崩溃,但90%的时间Button不存在! 如果它最初是隐藏的,它似乎只会崩溃,如果它最初没有崩溃,它将不再存在,即使我隐藏菜单并再次打开。

崩溃会在Debug上产生分段错误。

任何人都知道这可能是什么?

感谢您的时间。

编辑:我在Windows上运行它,因为测试速度更快,我希望它也可以在Windows上运行。我刚刚在一个机器人内部进行了测试,它似乎没有崩溃。但是每次打开或关闭菜单时,我都会在控制台上出现此错误:

Text

EDIT2:我刚刚设法以更简单的方式复制了这个bug。这似乎与矩形上的DropShadow有关。更简单的代码如下。当我运行它时,90%的时间没有出现文本。在Windows上对MinGW和MSVC2012进行了测试。

Drawable.qml:70 ((null)): file:///data/data/org.qtproject.example.OSC_Client/qt-reserved-files/qml/QtQuick/Controls/Styles/Android/drawables/Drawable.qml:70: TypeError: 
Cannot read property 'padding' of undefined

W/libOSC-Client.so(25977): file:///data/data/org.qtproject.example.OSC_Client/qt-reserved-files/qml/QtQuick/Controls/Styles/Android/drawables/AnimationDrawable.qml:53 ((null)): file:///data/data/org.qtproject.example.OSC_Client/qt-reserved-files/qml/QtQuick/Controls/Styles/Android/drawables/AnimationDrawable.qml:53:28:
Unable to assign [undefined] to bool

如果我删除了import QtQuick 2.4 import QtQuick.Controls 1.3 import QtGraphicalEffects 1.0 ApplicationWindow { title: qsTr("Hello World") width: 640 height: 480 visible: true Button { x: 0 y: 350 text: "Show Rectangle" onClicked: rect.visible = true; } Item { id: rect x: -1 y: -1 width: 250 height: 300 visible: false Rectangle { id: rectMenu anchors.fill: parent color: "#ececec" visible: false } DropShadow { id: menuShadow anchors.fill: rectMenu horizontalOffset: 1 verticalOffset: 0 radius: 4 samples: radius * 2 spread: 0 color: "#80000000" source: rectMenu transparentBorder: true } Text { anchors.centerIn: parent text: "Text" } } } ,它会正常显示文字。

qt.qpa.gl日志:

DropShadow

0 个答案:

没有答案