web-dev-qa-db-ja.com

qt4デザイナーでカスタムスロットを作成するにはどうすればよいですか?

信号/スロットエディタダイアログボックスを使用するときはいつでも、既存のスロットのリストから選択する必要があります。だから問題は、カスタムの名前付きスロットをどのように作成するかです。

21
user24560

残念ながら、これはQt4では不可能です。

Qt3では、カスタムスロットを作成して、ui.hファイルに実装することができます。ただし、Qt4はこのファイルを使用しないため、カスタムスロットはサポートされていません。

QtForum でこの問題に関するいくつかの議論があります

4
David Dibben

これはQtDesigner 4.5.2のバージョンでは可能であるように見えますが、Signal/Slot Editorのドックウィジェットからはできませんメインウィンドウで。

これは私のために働いたものです

  1. シグナル/スロットの編集 モード(F4)に切り替えます
  2. 信号を送信するウィジェットから信号を受信するウィジェットにドラッグアンドドロップします。
  3. 接続の構成ダイアログが表示され、送信ウィジェットの信号と受信ウィジェットのスロットが示されます。右側のスロット列の下にある編集...をクリックします。
  4. Signals/Slots of ReceivingWidgetダイアログが表示されます。ここでは、スロットの下にあるプラスアイコンをクリックして、任意の名前の新しいスロットを追加できます。
  5. 次に、接続の構成ダイアログで、または実際にメインウィンドウのSignal/Slot Editorドックウィジェットで、戻って新しいスロットに接続できます。

警告:私はPyQtを使用していますが、この方法で追加されたスロットはC++からではなく、Pythonからのみ使用しようとしたため、マイレージが異なる場合があります...

29
Rob Smallshire

メインウィンドウを右クリックし、「信号とスロットの変更」を選択して、新しいスロットを追加します。シグナルスロットエディタに表示されます。

28
raigon

私はそれを行うことができます:

MainWindow.hに、次の行を追加します。

public slots:
     void example();

mainWindowクラスで。

MainWindow.cpp内

void MainWindow::example() {
     <code>
}
4
James Dalton

これは簡単な方法では不可能のようです。

デザイナでは、既存のウィジェットを独自のカスタムウィジェットに昇格させることしかできません。それでも、プロモートされたウィジェットのクラスのシグナルとスロットを接続することはできません。

これを可能にする方法は、デザイナー用のプラグインをそのまま作成することです ここで説明 そしてそれに続くページで。

通常のアクションは、ウィジェットを独自のクラスにプロモートしてから、独自のコードで手動で接続することです。このプロセスについて説明します ここ

3
shoosh

QPushButtonのような既存のQtクラスにスロットを追加することになるため、これを行うことはできません。これは実際には方法ではありません。

最終的には、既存のものをサブクラス化して、独自のQWidgetを作成する必要があります。次に、提案されているように、プラグインとしてQtDesignerに統合します。独自のクラスを持つことで、必要に応じて使用可能な信号/スロットを追加/変更できます。

2
Pierre

スロットの自動接続機能を忘れないでください。ウィジェットの名前を変更すると関数の名前を変更しなければならないなど、いくつかの欠点がありますが、私たちの会社ではそれらを頻繁に使用しています。

あなたはの魔法のスロットフォーマットを使用することができます

void on_objectName_signal() {
// slot code here, where objectname is the Qt Designer object name
// and the signal is the emission
}

このメソッドへの接続は、メソッド connectSlotsByName によって確立され、シグナルが発信されるたびに、このスロットが呼び出されます。

2
Henrik Hartz

多分それは助けになるでしょう。

デフォルトでは、既存のスロットリストから選択する必要があります。ただし、デザイナの右側にあるリストでオブジェクトを右クリックし、[スロット/シグナル]を選択してカスタムスロット/シグナルを追加することで、スロットを追加できます。その後、シグナル/スロットエディタで選択できます。

1
l0kix2

右ボタンでウィジェットをクリックします

ウィジェットを定義したクラスにプロモートします

ウィジェットを右ボタンでもう一度クリックします

信号とスロットが編集可能であることがわかります

0
snow