--- ---问题
我创建了一个“TextBtn”组件,并在其中添加了一个“btnClicked”信号:
TextBtn.qml
import Qt 4.7
Rectangle {
property alias btnText: showStr.text
width:100
height:30
border.color: "black"
border.width: 1
color: "white"
signal btnClicked()
//the default signal handler
onBtnClicked: console.log(btnText+" is clicked.")
MouseArea {
id: btnMouseArea
anchors.fill: parent
onClicked: btnClicked()
}
Text {
id: showStr
anchors.centerIn: parent
color: "black"
}
}
另一个组件“MenuRow”包含三个“TextBtn”,如下所示:
MenuRow.qml
import Qt 4.7
Row {
spacing: 5
TextBtn {
id: testBtn01
btnText: "test01"
}
TextBtn {
id: testBtn02
btnText: "test02"
}
TextBtn {
id: testBtn03
btnText: "test03"
}
}
当单击“MenuRow”中的一个“TextBtn”时,应该触发“TextBtn”中的默认单个处理程序“onBtnClicked”,但事实并非如此。发生了什么事?
相关的qml文档位于:http://doc.qt.nokia.com/4.7/gettingstartedqml.html#basic-component-a-button
---发展环境---
操作系统:Ubuntu 10.04
Qt版本:4.7.0(使用“qt-sdk-linux-x86-opensource-2010.05.1.bin”在默认路径“$ HOME / qtsdk-2010.05 /”中安装qt sdk)
在运行qml之前,我发送文件“qtsetup.sh”来设置相关路径,
$ source qtsetup.sh
qtsetup.sh
QTDIR=$HOME/qtsdk-2010.05/qt/
PATH=$PATH:$QTDIR/bin
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$QTDIR/lib
然后使用“qmlviewer”运行qml文件。
$ qmlviewer MenuRow.qml
触发qmlviewer窗口并显示“MenuRow”。没有错误发生。我使用鼠标点击“MenuRow”中的“TextBtn”,但没有任何反应。 (它应该在终端中显示消息“text0X被点击”。)
我使用qmlviewer来运行其他示例和演示,它们似乎运行良好。我不知道为什么这个例子不起作用。
答案 0 :(得分:0)
此处也出现问题(qmlviewer 4.7.0)。
看起来这是qmlviewer中的一个错误,请阅读后续内容here。
如果删除别名(btnText),信号将起作用。 (但正确的解决方案是更新到4.7.1 +)