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」には、次の 3 つの「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」の 1 つがクリックされると、「TextBtn」のデフォルトの単一ハンドラー「onBtnClicked」がトリガーされるはずですが、トリガーされません。どうしたの?

関連する qml ドキュメントはこちら: http://doc.qt.nokia.com/4.7/gettingstartedqml.html#basic-component-a-button

- -開発環境 - -

OS: 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 を使用して他の例やデモを実行していますが、うまく機能しているようです。この例が機能しない理由がわかりません。

4

1 に答える 1

0

ここでも問題が発生します (qmlviewer 4.7.0)。

qmlviewer のバグのようです。フォローアップはこちらをご覧ください。

エイリアス (btnText) を削除すると、シグナルが機能します。(ただし、適切な解決策は 4.7.1+ に更新することです)

于 2011-04-26T01:00:46.150 に答える