qml默认信号处理程序无法正常工作

时间:2011-02-09 05:03:15

标签: components signals qml

--- ---问题

我创建了一个“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来运行其他示例和演示,它们似乎运行良好。我不知道为什么这个例子不起作用。

1 个答案:

答案 0 :(得分:0)

此处也出现问题(qmlviewer 4.7.0)。

看起来这是qmlviewer中的一个错误,请阅读后续内容here

如果删除别名(btnText),信号将起作用。 (但正确的解决方案是更新到4.7.1 +)