レッスン 2 - 信号とスロットのメカニズム_PHP チュートリアル
lesson2-シグナルとスロットの仕組み
1. シグナルとスロットの理解1. シグナルとスロットとは何ですか?
多くの GUI ツールでは、各ウィジェットがトリガーできるアクションに応答するコールバック関数を持っています。これらのコールバック関数は通常、特定の関数へのポインターです。ポインターは比較的面倒な概念です。Qt では、シグナルとスロットがこれらの厄介な関数ポインターを置き換え、プログラムの作成を簡素化します。
オブジェクトが変更されると、オブジェクトが行うべきことはこれだけです。このプロセスは、実際の情報のカプセル化です。
スロットはシグナルを受信するために使用されます。これらは、それに関連付けられたシグナルがあるかどうかを知りません。
Qt では、ボタンがクリックされたとき、ボタンがシグナルを送信し、このシグナルが別のオブジェクトに渡され、シグナルを受信したオブジェクトが対応するアクションを実行します。これがシグナルとスロットの仕組みです
2)。 、シグナルとスロットが渡されます
QObject::connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::Connection type=Qt::AutoCompatConnection) は、送信者である
sender を関連付けます。信号
信号、送信される信号
受信者、信号の受信者
メソッド、スロット関数
タイプ、信号とスロットの関係
2)、タイプには 3 つのタイプがあります
Qt::DirectConnection、シグナルは送信直後にスロットに渡され、スロット関数のみが実行完了して返されると、シグナル送信後のコード「emit
」が実行可能になりますシグナル送信後はQt::QueueConnectionとなります。イベント ループがスロットに渡す能力を得るまでキューに入れられ、スロット関数が実行されるかどうかに関係なく、シグナルが送信されます。「emit
後のコード」はすぐに実行されますQt::AutoCompatConnection。信号とスロットが同じスレッド内にある場合は、Qt::DirectConnection と同等です。シグナルとスロットが同じスレッド内にない場合は、
Qt::QueueConnection と同等です。
2. シグナルとスロットの例
1. シグナル
オブジェクトの内部状態が変化すると、シグナルを発行できるのは、シグナルを定義するクラスとそのサブクラスだけです。たとえば、クリックされた信号は QPushButton クラスで事前定義されており、ボタンがクリックされると、クリックされた信号が出力されます。
Qt のシステム定義済みシグナルに加えて、シグナルをカスタマイズすることもできます
シグナルの宣言はヘッダー ファイルにあり、キーワード signals で始まります
signals:
void signal();
void signal(int x) ;
ここには 2 つの信号がありますが、それらは同じ名前ですが、異なるパラメーターを持ちます。これは関数のオーバーロードに似ています。
シグナルは通常の C++ 関数に似ていますが、エンティティはなく、空のシェルのみがあり、戻り値は常に void です。シグナルから有用な情報が返されることは期待できません。シグナルは宣言された後、moc ツールによって自動的に生成されるため、.cpp ファイルには配置しないでください。
システムの事前定義されたシグナルは通常、自動的に発行されるため、手動でシグナルを発行する必要がある場合は、次のように記述することができます。
2 スロットは通常の C++ メンバー関数であり、通常どおり呼び出すと、多くのシグナルをスロットに関連付けることができます。スロットは通常のメンバー関数であるため、権限もあります。したがって、スロット関数にはパブリック スロット、プライベート スロット、保護スロットの 3 種類があります。プライベート スロットの宣言もヘッダー ファイル内にあります。
void mySlot1();
void mySlot1(int x);
シグナル内で と スロット関数の宣言の前に、マクロ Q_OBJECT を追加する必要があります。この方法でのみ Qt はそれらを認識します
3. メタオブジェクト ツール
moc ツールは C++ でクラスの宣言を初期化します。 C++ コードでは、メタオブジェクトにはすべての信号とスロット、およびこれらの名前へのポインタが含まれます。
moc は C++ ソース ファイルを読み取り、Q_OBJECT マクロで宣言されたクラスを見つけると、別の C++ ソース ファイルを生成します。 moc ツールは #define を拡張しないため、シグナル関数とスロット関数にマクロ定義を含めることはできません
4. 関連付け
信号とスロット間の関連付けは関数 connect
btn = new QPushButton(); を介して行われます
lab = new QLabel ();
connect( btn, SIGNAL(clicked()), lab, SLOT(clear()))
シグナルはマクロ SIGNAL() を使用する必要があり、スロット関数はマクロ SLOT() を使用する必要があります。シグナルとスロットのパラメーターは一貫している必要があります。
シグナルとスロットが同じオブジェクトに属している場合、シグナルの受信者は省略できます
connect(btn, SIGNAL(clicked()), SLOT(showMenu( )))
シグナルとスロットの注意すべき問題点
1)、シグナルとスロット領域内にコンストラクターを置くことはできない
2)、シグナルとスロットのパラメータとして関数ポインタを使用することはできない
3)、シグナルスロットはデフォルトのパラメーターを持つことはできません
4)、シグナルとスロットはテンプレート クラス パラメーターを持つことはできません
5)、ネストされたクラスはシグナルとスロット領域に存在することはできません、また、シグナルとスロットを持つこともできません

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









ここ数日、Ice Universeは、サムスンの次期主力スマートフォンであると広く信じられているGalaxy S25 Ultraの詳細を着実に明らかにしている。とりわけ、リーカーはサムスンがカメラのアップグレードを1つだけ計画していると主張した

OnLeaks は、X (旧 Twitter) のフォロワーから 4,000 ドル以上を集めようとして失敗した数日後、Android Headlines と提携して Galaxy S25 Ultra のファーストルックを提供しました。コンテキストとして、h の下に埋め込まれたレンダリング イメージ

TCLは、2つの新しいスマートフォンの発表に加えて、NXTPAPER 14と呼ばれる新しいAndroidタブレットも発表しました。その巨大な画面サイズはセールスポイントの1つです。 NXTPAPER 14 は、TCL の代表的なブランドであるマット LCD パネルのバージョン 3.0 を搭載しています。

ここ数日、Ice Universeは、サムスンの次期主力スマートフォンであると広く信じられているGalaxy S25 Ultraの詳細を着実に明らかにしている。とりわけ、リーカーはサムスンがカメラのアップグレードを1つだけ計画していると主張した

Vivo Y300 Pro は完全に公開されたばかりで、大容量バッテリーを備えた最もスリムなミッドレンジ Android スマートフォンの 1 つです。正確に言うと、このスマートフォンの厚さはわずか 7.69 mm ですが、6,500 mAh のバッテリーを搭載しています。これは最近発売されたものと同じ容量です

サムスンは、ファンエディション(FE)スマートフォンシリーズをいつアップデートするかについて、まだ何のヒントも提供していない。現時点では、Galaxy S23 FE は 2023 年 10 月初めに発表された同社の最新版のままです。

Redmi Note 14 Pro Plusは、昨年のRedmi Note 13 Pro Plus(Amazonで現在375ドル)の直接の後継者として正式に発表されました。予想通り、Redmi Note 14 Pro Plusは、Redmi Note 14およびRedmi Note 14 Proと並んでRedmi Note 14シリーズをリードします。李

Motorola は今年数え切れないほどのデバイスをリリースしましたが、そのうち折りたたみ式デバイスは 2 つだけです。ちなみに、世界の大部分ではこのペアが Razr 50 および Razr 50 Ultra として受け入れられていますが、Motorola は北米では Razr 2024 および Razr 2 として提供しています。
