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

StackOverflow https://stackoverflow.com/questions/165637

質問

シグナル/スロットエディターのダイアログボックスを使用するときは常に、既存のスロットのリストから選択する必要があります。質問は、カスタムの名前付きスロットをどのように作成するのですか?

役に立ちましたか?

解決

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

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

この問題については、 QtForum

他のヒント

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

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

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 そして信号が発せられるたびに、このスロットが呼び出されます。

おそらく役立つでしょう。

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

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

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

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

信号とスロットは編集可能です

scroll top