2

Qt 5.9.3 に基づいて新しい QML プロジェクトを作成しました。Button と独自のボタン (MyButton) を使用して単純な ApplicationWindow をセットアップしましたが、onClicked() イベントが発生することはありません (どうやら)。アプリケーション ウィンドウがポップアップし、2 つのボタンが表示されます。いずれかをクリックしても、コンソール出力には何も表示されません。

また、それが問題になる場合は、qml ソース ファイルを .pro ファイルにプリコンパイルします。起動時にいくつかのフォント エラーが発生します。これを C++ で修正していくつかのフォントを動作させ、エラーや警告がないこと以外は何かを確認できます。単純なマウスクリックイベントを成功させようとして数時間費やしましたが、うまくいきませんでした。

どんな助けでも大歓迎です。

これが私の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()
        }
    }
}

更新:私は非常に愚かなことをしました。含めなかった main.cpp ファイルでは、よりクリーンになり、QQmlEngine init コードを独自の別のメソッドに移動すると思いました。もちろん、エンジン参照が範囲外になると、問題が発生しました。そこに何か問題があるとqmlコードがまったく機能しないと誤って想定したため、私はそこを見ていませんでした。非常に忙しい 1 週間であり、帯域幅を浪費して申し訳ありませんでした。今後の参考のために、素晴らしいデバッグの提案もありがとうございます!

4

1 に答える 1

3

QtQuick.Controls 2.0からの問題についてはわかりませんButton-私にとっては完全に機能します。

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

その理由は、 (およびそのすべての子)visible: falseを非アクティブ化するためです - 設定はそれを変更しません。 にはレンダリングするものが何もないため、設定はとにかく不要です- 効果的に見えません。MouseAreaenabled: true
visible: falseMouseArea

それを変更すると、次の警告が表示されます。

Error: Insufficient arguments

引数を必要とするのシグナルclickedを呼び出すとき( )。自分で定義したシグナルを呼び出すには、代わりに呼び出します.RMouseAreaMouseEventbutton.clicked()


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

  1. console.logたとえば、オブジェクトの 1 つに追加することによって、出力を生成できるかどうかを確認Component.onComplete: console.log("Output works")します。

  2. をクリックしたRectangleときにの色を変更して、入力が本当に壊れているかどうかを確認します。MouseAreacolor: (mouseArea.pressed ? 'red' : 'green')

  3. anが登録されている場合、何かを出力する aneventFilterを(C++ で) にインストールします。QGuiApplicationMouseEvent

于 2017-12-04T23:41:43.093 に答える