シグナル/スロット エディター ダイアログ ボックスを使用するときは常に、既存のスロット リストから選択する必要があります。問題は、カスタムの名前付きスロットを作成するにはどうすればよいかということです。
10 に答える
これは、Qt Designer 4.5.2のバージョンでは可能であるように見えますが、メインウィンドウのSignal /SlotEditorドックウィジェットからは実行できません。
これは私のために働いたものです
- 信号/スロットの編集モードに切り替えます(F4)
- 信号を発信するウィジェットから信号を受信するウィジェットにドラッグアンドドロップします。
- [接続の構成]ダイアログが表示され、送信側ウィジェットの信号と受信側ウィジェットのスロットが示されます。右側のスロット列の下にある[編集... ]をクリックします。
- Signals / SlotsofReceivingWidgetダイアログが表示されます。ここでは、スロットの下にあるプラスアイコンをクリックして、任意の名前の新しいスロットを追加できます。
- その後、[接続の構成]ダイアログで、または実際にメインウィンドウのSignal / Slot Editor dockwidgetで、戻って新しいスロットに接続できます。
警告:私はPyQtを使用していますが、この方法で追加されたスロットはC ++からではなく、Pythonからのみ使用しようとしたため、マイレージは異なる場合があります...
メイン ウィンドウを右クリックし、[シグナルとスロットの変更] を選択して、新しいスロットを追加します。シグナル スロット エディターに表示されます。
私はそれを行うことができます:
MainWindow.h に次の行を追加します。
public slots:
void example();
MainWindow クラスで。
MainWindow.cpp 内
void MainWindow::example() {
<code>
}
残念ながら、これは Qt4 では不可能です。
Qt3 では、ui.h ファイルに実装されたカスタム スロットを作成できました。ただし、Qt4 はこのファイルを使用しないため、カスタム スロットはサポートされていません。
この問題については、QtForumでいくつかの議論があります。
これは単純な方法では不可能のようです。
デザイナでは、既存のウィジェットを独自のカスタム ウィジェットに昇格させることしかできません。ただし、プロモートされたウィジェットのクラスのシグナルとスロットを接続することはできません。
これを可能にする方法は、こことそれに続くページで説明されているように、デザイナー用のプラグインを作成することです。
通常のアクションは、ウィジェットを独自のクラスに昇格させてから、独自のコードで手動で接続することです。このプロセスはここで説明されています
スロットの自動接続機能を忘れないでください。ウィジェットの名前を変更すると、関数の名前を変更する必要があるなど、いくつかの欠点がありますが、私の会社ではそれらを頻繁に使用しています。
これは、既存の Qt クラスにスロットを追加することを意味するため、実際には実行する方法ではないため、これを行うことはできQPushButton
ません。
QWidget
最終的には、既存のものをサブクラス化して独自のものを作成する必要があります。次に、提案されているプラグインとして Qt Designer に統合します。独自のクラスを持つことで、必要に応じて利用可能なシグナル/スロットを追加/変更できます。
のマジックスロット形式を使用できます
void on_objectName_signal() {
// slot code here, where objectname is the Qt Designer object name
// and the signal is the emission
}
このメソッドへの接続はメソッドconnectSlotsByNameによって確立され、シグナルが送信されるたびに、このスロットが呼び出されます。
多分それは助けになるでしょう。
デフォルトでは、スロットの既存のリストから選択する必要があります。ただし、デザイナーの右側にあるリストのオブジェクトを右クリックしてスロットを追加し、「スロット/シグナル」を選択してカスタム スロット/シグナルを追加できます。その後、シグナル/スロットエディターで選択できます。
ウィジェットを右クリック
定義したクラスにウィジェットを昇格させる
もう一度右ボタンでウィジェットをクリックします
シグナルとスロットが編集可能であることがわかります