あなたは、このようなように、あなたのための切断を行い、小さなヘルパー関数を作成することができます。使用方法のデモンストレーションとして
function connectOnce(sig, slot) {
var f = function() {
slot.apply(this, arguments)
sig.disconnect(f)
}
sig.connect(f)
}
:
import QtQuick 2.7
import QtQuick.Controls 2.0
ApplicationWindow {
id: myWindow
visible: true
width: 600
height: 600
color: 'white'
signal action(string name)
function slot(name) {
console.log(name)
}
Button {
text: 'connect'
onClicked: {
connectOnce(action, slot)
}
}
Button {
y: 80
text: 'action'
onClicked: {
action('test')
}
}
function connectOnce(sig, slot) {
var f = function() {
slot.apply(this, arguments)
sig.disconnect(f)
}
sig.connect(f)
}
}
を上位2つのボタンslot
を接続し、シングルショットモードのslot2
を信号action
に変換します。 ボタンアクションは、接続されている回数だけスロットを実行する信号action
を発生させます。その後すぐに切断されます。
あなたはライブラリに関数connectOnce
を入れて、あなたが必要とするところにあなたの役に立つようにすることができます。
このソリューションは簡単に閉鎖してカウンタを導入することにより、n
回実行される機能を接続するより一般的な形式に拡張されます。
function connectN(sig, slot, n) {
if (n <= 0) return
var f = function() {
slot.apply(this, arguments)
n--
if (n <= 0) sig.disconnect(f)
}
sig.connect(f)
}
何の問題切断 'を呼び出すために() '? – folibis
@folibis:1.それから、 'handleSig'という名前は3倍になります。2.読みにくいです。3.ハンドラーを' connect'呼び出しの中で定義することはできません。 –