qt4デザイナーでカスタムスロットを作成するにはどうすればよいですか?
-
03-07-2019 - |
質問
シグナル/スロットエディターのダイアログボックスを使用するときは常に、既存のスロットのリストから選択する必要があります。質問は、カスタムの名前付きスロットをどのように作成するのですか?
解決
残念ながら、これはQt4では不可能です。
Qt3では、ui.hファイルに実装されたカスタムスロットを作成できます。ただし、Qt4はこのファイルを使用しないため、カスタムスロットはサポートされていません。
この問題については、 QtForum
他のヒント
これはQt Designer 4.5.2のバージョンでは可能と思われますが、メインウィンドウのSignal / Slot Editorドックウィジェットからはできません。 >
これは私のために働いたものです
- 信号/スロットの編集モード(F4)
- 信号を送信するウィジェットから、信号を受信するウィジェットにドラッグアンドドロップします。
- 接続の構成ダイアログが表示され、発信ウィジェットの信号と受信ウィジェットのスロットが表示されます。右側のスロット列の下にある[編集... ]をクリックします。
- Signals / Slots of ReceivingWidget ダイアログが表示されます。ここでは、スロットの下にあるプラスアイコンをクリックして、任意の名前の新しいスロットを追加できます。
- その後、戻って接続の設定ダイアログ、または実際にメインウィンドウに戻ったシグナル/スロットエディタドックウィジェットで新しいスロットに接続できます。
注意:私はPyQtを使用していますが、この方法で追加されたスロットはC ++ではなくPythonからのみ使用しようとしたため、マイレージが異なる場合があります...
メインウィンドウを右クリックして、[信号とスロットの変更]を選択します。新しいスロットを追加します。 信号スロットエディタに表示されます。
私はそれをすることができます:
MainWindow.hで、次の行を追加します。
public slots:
void example();
MainWindowクラス内。
MainWindow.cppで
void MainWindow::example() {
<code>
}
それを行うことはできません。これは、 QPushButton
のような既存のQtクラスにスロットを追加することを意味するため、実際には進むべき道ではありません。
既存のものをサブクラス化して、最終的に独自の 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 メソッドによって確立されますそして信号が発せられるたびに、このスロットが呼び出されます。
おそらく役立つでしょう。
デフォルトでは、既存のスロットのリストから選択する必要があります。ただし、デザイナーの右側のリストでオブジェクトを右クリックして「スロット/信号」を選択すると、スロットを追加できます。カスタムスロット/信号を追加します。その後、シグナル/スロットエディターで選択できます。
右ボタンでウィジェットをクリック
ウィジェットを定義したクラスにプロモートします
もう一度右ボタンでウィジェットをクリックします
信号とスロットは編集可能です