- -问题 - -
我创建了一个“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”,如下所示:
菜单行.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 is clicked”。)
我使用 qmlviewer 运行其他示例和演示,它们似乎运行良好。我不知道为什么这个例子不能工作。