2017-12-04 1 views
0

IveはQt 5.9.3に基づいて新しいQMLプロジェクトを作成しました。ボタンとMyボタン(MyButton)を持つ単純なApplicationWindowをセットアップして、onClicked()イベントを発生させることは決してありません。アプリケーションウィンドウに2つのボタンが表示されます。いずれかをクリックすると、コンソール出力に何も表示されません。qmlボタンが発射されず、MouseAreaと同じ

私のqmlソースファイルも.proファイルであらかじめコンパイルしておくことも重要です。私は に私が修正する起動時にいくつかのフォントエラーを取得するので、私は何かを見ることができるので、 エラーまたは警告がない以外のフォントを取得します。 Iveは運のない単純な マウスクリックイベントを得るために数時間を費やしました。

何か助けていただければ幸いです。

は、ここに私のmain.qmlです:

import QtQuick 2.7 
import QtQuick.Controls 2.0 

ApplicationWindow { 
    visible: true 
    width: 640 
    height: 480 
    title: "App Title" 
    color: "white" 

    Button { 
     text: "Button" 
     onClicked: { 
      console.log("clicked") 
     } 
    } 
    MyButton { 
     anchors.right: parent.right 
     anchors.top: parent.top 
     onClicked: { 
      console.log("my button clicked") 
     } 
    } 
} 

とMyButton.qml

import QtQuick 2.7 

Rectangle { 
    id: button 
    width: 100 
    height: 50 
    color: "yellow" 

    signal clicked() 

    MouseArea { 
     id: mouseArea 
     anchors.fill: button 
     visible: false 
     enabled: true 
     onClicked: { 
      console.log("my button mouse clicked") 
      clicked() 
     } 
    } 
} 

UPDATE:私は非常に愚かなことをしました。私が行ったmain.cppファイルで 私はクリーナーとQQmlEngineのinitコード を独自の別の方法に移動すると思っていません。もちろん、エンジンリファレンスが範囲外の になったとき、それは私の問題を引き起こしました。そこに何か問題があった場合、qmlコードがまったくうまくいかないと間違って判断したので、私はそこを見ていませんでした。これほど遅れて申し訳ありませんが、非常に忙しい週でしたし、帯域幅を無駄にしてしまいました。将来の参考のために、素晴らしいデバッグの提案をありがとう!

答えて

1

QtQuick.Controls 2.0のButtonであなたの問題について知りません - それは私のために完全に動作します。

MyButtonの独自の実装では、それは私にとってはうまくいきません。

visible: falseMouseArea(およびそのすべての子)を無効にするため、enabled: trueはそれを変更しません。
は何も描画されていないので、不可視であるため、visible: falseの設定は必要ありません。あなたは警告を取得する必要があります、ということに変更したら

:あなたは信号の引数(MouseEvent)が必要MouseAreaclicked呼び出すよう

Error: Insufficient arguments

。あなたの自己定義された信号を呼び出すには、呼び出しbutton.clicked() instead.R


それでもanytingを取得しない場合は、さらにデバッグ手順を実行する必要があります。

  1. あなたがオブジェクトの一つにComponent.onComplete: console.log("Output works")を追加することによって、例えばconsole.logを使って任意の出力を生成することができるかどうかを確認します。あなたの入力は本当にMouseAreaがクリックされたときにRectangleの色を変更することで、壊れているかどうかを

  2. チェック:color: (mouseArea.pressed ? 'red' : 'green')

  3. MouseEvent場合は、何かを印刷しますあなたのQGuiApplicationeventFilter(C++で)をインストールします登録されています。

関連する問題