0

- -问题 - -

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

4

1 回答 1

0

问题也发生在这里(qmlviewer 4.7.0)。

看起来这是 qmlviewer 中的错误,请在此处阅读后续内容。

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

于 2011-04-26T01:00:46.150 回答