4

今夜QtCreatorを使い始めたところですが、すべてのインターフェイスがuiファイル内にあるようです。チュートリアルに従ってアイコンのリソースを作成し、上部のメニューバーにアイコンを追加しました。

ただし、そのうちの1つがクリックされたときに接続を確立する必要があり、そのコールバックを作成する方法がわかりません。
コードを使用して完全に作成する必要がありますか、それとも(他のオブジェクトと相互作用させるだけでなく)コールバックを追加する方法がありますか?

4

2 に答える 2

12

メニューバーの項目はアクションオブジェクトです。クリックされたときに何かを行うには、アクションからのtriggered() シグナルをキャッチする必要があります。信号とスロットについて詳しくは、こちらをご覧ください。

これを行うには、MainWindowクラスで新しいスロットを宣言する必要があります。Qtは、何も接続しなくてもこれを自動的に行うこともサポートしていますが、私は自分で行うことを好みます。興味がない場合は、この部分をスキップしてください。

まず、ウィンドウクラスで新しいスロットを宣言します。

private slots:
  void clickMenuButton();

次に、コンストラクターで、トリガーされたシグナルを新しいスロットに接続する必要があります。

connect(ui.actionObject, SIGNAL(triggered()), this, SLOT(clickMenuButton()));

最初の引数は、聞く信号を保持するオブジェクト(メニューボタン)です。2番目は信号の名前です。3つ目は、受信スロット(この場合はウィンドウ)を保持するオブジェクトです。4番目はスロットです。

そして、そのようにclickMenuButton()、アクションがクリックされるたびに呼び出されます。

前に述べたように、Qtは信号をスロットに自動的に接続することもできます。ここでの欠点は、スロットの名前を変更できないことですが、スロットを接続する必要もありません。

Qt Creatorは、ウィジェット用のスロットの作成をサポートしています。メニューアクションの場合は、フォームデザイナーに移動すると、フォームにアクションのリストが表示されます(表示されない場合は、アクションエディターを見つけてください)。目的のアクションを右クリックし、[スロットに移動... ]を押します。そこで、ダブルクリックしますtriggered()

Qt Creatorはコードエディタで新しいスロットを開き、ここでやりたいことが何でもできます!

于 2010-01-31T13:13:09.620 に答える
0

これを行うには、をQAction追加し、メニューに追加し、アイコンを関連付けてから、そのコールバックを作成する必要があります。私はVSIntegrationを使用しているので、Creatorでそれを行う方法の詳細はわかりませんが、コードで何かを作成しなくても可能であるはずです。

アクションエディタがどこかにあるはずです。そこからアクションを追加し、それまたは何かを右クリックしてアイコンを追加し、それをドラッグしてメニューを実行し、場合によってはダブルクリックしてスロットを作成します。これは、少なくともVS統合でどのように機能するかです。

于 2010-01-31T12:39:10.613 に答える