今夜QtCreatorを使い始めたところですが、すべてのインターフェイスがuiファイル内にあるようです。チュートリアルに従ってアイコンのリソースを作成し、上部のメニューバーにアイコンを追加しました。
ただし、そのうちの1つがクリックされたときに接続を確立する必要があり、そのコールバックを作成する方法がわかりません。
コードを使用して完全に作成する必要がありますか、それとも(他のオブジェクトと相互作用させるだけでなく)コールバックを追加する方法がありますか?
今夜QtCreatorを使い始めたところですが、すべてのインターフェイスがuiファイル内にあるようです。チュートリアルに従ってアイコンのリソースを作成し、上部のメニューバーにアイコンを追加しました。
ただし、そのうちの1つがクリックされたときに接続を確立する必要があり、そのコールバックを作成する方法がわかりません。
コードを使用して完全に作成する必要がありますか、それとも(他のオブジェクトと相互作用させるだけでなく)コールバックを追加する方法がありますか?
メニューバーの項目はアクションオブジェクトです。クリックされたときに何かを行うには、アクションからの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はコードエディタで新しいスロットを開き、ここでやりたいことが何でもできます!
これを行うには、をQAction
追加し、メニューに追加し、アイコンを関連付けてから、そのコールバックを作成する必要があります。私はVSIntegrationを使用しているので、Creatorでそれを行う方法の詳細はわかりませんが、コードで何かを作成しなくても可能であるはずです。
アクションエディタがどこかにあるはずです。そこからアクションを追加し、それまたは何かを右クリックしてアイコンを追加し、それをドラッグしてメニューを実行し、場合によってはダブルクリックしてスロットを作成します。これは、少なくともVS統合でどのように機能するかです。