我在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