QML_シグナル

プロジェクトの説明:
qml ファイル内の信号の種類と使用方法を説明する例を示します。

参考リンク: https://blog.csdn.net/FY_13781298928/article/details/128864687
Qml ファイルには 3 つの共通シグナルがあります。

  1. コントロール自体からの信号 (クリック、ホバー、チェックなど)
  2. プロパティが変更されたときに発生するシグナル
  3. カスタム信号

信号自体:

Button{
    
    
       anchors.centerIn: parent
       width: 100
       height: 50
       text: "自带信号"
       onClicked: {
    
    
           console.log("点击...")
       }

プロパティの変化のシグナル:

import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15

Window {
    
    
    id:root
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello Signal")

    property int count: 0

    onCountChanged: {
    
    
        console.log("自定义的属性值 count 发生了变化...")
    }

    Button{
    
    
        width: 100
        height: 50
        text: "属性信号"
        onClicked: {
    
    
            rect.color = "lightgreen"
        }
    }
    Rectangle{
    
    
        id:rect
        anchors.centerIn: parent
        width: 200
        height: 200
        color: "lightblue"

        onColorChanged: {
    
    
            console.log("rect自身的 color 属性发生了变化...")
            count++         //更改自定义属性值
        }
    }
 }

カスタム信号:

キーワード: 信号
形式: 信号 + 信号名 (パラメータ)
例:

signal myFunction()定义无参信号
signal myFunction(var name)定义带参信号


信号応答: on + 信号名。信号名の最初の文字は大文字にする必要があることに注意してください —> onMyFunction: { } を監視するには接続コントロールを使用する必要があります。対応する処理関数を括弧内に記述します

import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15

Window {
    
    
    id:root
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello Signal")

    signal myFunction() //无参信号
    signal myFunction2(var name)    //带参信号

    Connections{
    
    
        target: root
        onMyFunction:{
    
    
            console.log("单击了矩形")
        }
        onMyFunction2:{
    
    
            console.log("双击了矩形,其名称为:" + name)	//此处的变量 name 是信号中传输过来的
        }
    }

    Rectangle{
    
    
        id:rect
        anchors.centerIn: parent
        width: 200
        height: 200
        color: "lightblue"

        MouseArea{
    
    
            anchors.fill: parent
            onClicked: {
    
    
                myFunction()    //发射无参信号
            }
            onDoubleClicked: {
    
    
                myFunction2(rect.color)   //发射带参信号
            }
        }
    }
 }

カスタム信号はウィジェット内でリンクできます。

    QQuickItem *item = ui->quickWidget->rootObject();
    connect(item, SIGNAL(sliderMoved(qreal)), this, SLOT(onSliderMoved(qreal)));
    connect(item, SIGNAL(playClicked()), this, SLOT(onPlay()));
    connect(item, SIGNAL(pauseClicked()), this, SLOT(onPause()));
    connect(this, SIGNAL(sigPalyProgress(qreal)), item, SIGNAL(updatePlayProgress(qreal)));

C++ を使用してウィンドウに埋め込まれた QML と対話します
C++ を使用してウィンドウに埋め込まれた QML にデータを渡します

//次のメソッドを使用して qml にデータを転送でき、obj を qml ウィジェットで直接使用できます
-> rootContext() -> setContextProperty(obj, value);
1
2
C++ を使用してウィンドウに埋め込まれた QML オブジェクトを取得します

// 次のメソッドを使用して qml オブジェクトを取得し、QQuickItem* 形式で QQuickItem* を返します。
qmlItem = widget -> rootObject();

おすすめ

転載: blog.csdn.net/weixin_44248637/article/details/130089910