1

最新のBlackBerry10プラットフォームでカスタムボタンを作成しようとしています。

ボタンは、クリックされたときに背景画像を変更し、2回目にクリックされたときに元に戻す必要があります

ボタンのロジックは非常に単純です。クリックすると、現在ボタンにある画像の種類を確認し、画像のソースを変更します。

私は次のような基本的なQMLカスタムコントロールから始めました(ラベルやその他の重要でないものを取り除いたもの):

import bb.cascades 1.0

Container
{

    id: root
    layout: DockLayout
    {
    }

    function clickMe()
    {
        var source = myImage.defaultImageSource.toString();

        console.log(source);

        if (source.endsWith("image.png"))
        {
            myImage.defaultImageSource = "asset:///images/image_pushed.png";
        }
        else
        {
            myImage.defaultImageSource = "asset:///images/image.png";
        }
    }

    ImageButton
    {
        id: myImage
        defaultImageSource: "asset:///images/image.png"
    }

    onCreationCompleted: 
    {
        myImage.clicked.connect(root.clickMe);
    }
}

ImageButtonクリックイベントはJavaScript関数clickMeに接続されています。関数が起動し、URLがコンソールに正しく記録されます。

image_pushed.pngが設定されないため、問題はIF句です。これが問題である理由と、このボタンを実装するにはどうすればよいですか?

私はこの問題の唯一のQMLソリューションを探していて、次の情報を見つけました。

  • defaultImageSourceプロパティはタイプQUrlであり、toString()メソッドが含まれています。
  • toString()メソッドはQStringを返しますが、これには実際に関数endsWithがあります。
  • 私のQMLリファレンス:http://qt-project.org/doc/qt-4.8/qstring.html#endsWith

ありがとう。

4

2 に答える 2

3

QML 内では、QString インスタンスは通常の JavaScript 文字列のように見えます。このマッピングは自動的に行われます。また、Javascript 文字列にはメソッドがありませんendsWithsearchメソッドを正規表現で使用して、同じことを実現できます。

if (source.search(/image\.png$/ !== -1) { /* ... */ }
于 2012-11-22T08:03:07.133 に答える
0

プロパティを使用すると、より簡単な方法を作成できると思います

例えば:

Control{
 id : myControl
 property bool state
 ImageButton{
  defaultImageSource : state ? "firstImageAsset.png" : "secondImageAsset.png"
  onClick :{
    myControl.state = !myControl.state
  } 
 }
}
于 2012-11-22T08:03:39.047 に答える