目次
lesson2-シグナルとスロットの仕組み
ホームページ バックエンド開発 PHPチュートリアル レッスン 2 - 信号とスロットのメカニズム_PHP チュートリアル

レッスン 2 - 信号とスロットのメカニズム_PHP チュートリアル

Jul 12, 2016 am 09:05 AM
android

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)、ネストされたクラスはシグナルとスロット領域に存在することはできません、また、シグナルとスロットを持つこともできません























www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/1068093.html技術記事 lesson2-信号とスロットの仕組み 1. 信号とスロットの理解 1. 信号とスロットとは何ですか? 多くの GUI ツールでは、各ウィジェットには、トリガー機能に応答するコールバック関数があります...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

新しいレポートは、噂のSamsung Galaxy S25、Galaxy S25 Plus、Galaxy S25 Ultraのカメラアップグレードのひどい評価を提供します 新しいレポートは、噂のSamsung Galaxy S25、Galaxy S25 Plus、Galaxy S25 Ultraのカメラアップグレードのひどい評価を提供します Sep 12, 2024 pm 12:23 PM

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

Samsung Galaxy S25 Ultraの最初のレンダリング画像がリークされ、噂のデザイン変更が明らかに Samsung Galaxy S25 Ultraの最初のレンダリング画像がリークされ、噂のデザイン変更が明らかに Sep 11, 2024 am 06:37 AM

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

IFA 2024 | TCLのNXTPAPER 14は、パフォーマンスではGalaxy Tab S10 Ultraに匹敵しませんが、サイズではほぼ匹敵します IFA 2024 | TCLのNXTPAPER 14は、パフォーマンスではGalaxy Tab S10 Ultraに匹敵しませんが、サイズではほぼ匹敵します Sep 07, 2024 am 06:35 AM

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

新しいレポートは、噂のSamsung Galaxy S25、Galaxy S25 Plus、Galaxy S25 Ultraのカメラアップグレードのひどい評価を提供します 新しいレポートは、噂のSamsung Galaxy S25、Galaxy S25 Plus、Galaxy S25 Ultraのカメラアップグレードのひどい評価を提供します Sep 12, 2024 pm 12:22 PM

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

Vivo Y300 Pro は、7.69 mm のスリムなボディに 6,500 mAh のバッテリーを搭載 Vivo Y300 Pro は、7.69 mm のスリムなボディに 6,500 mAh のバッテリーを搭載 Sep 07, 2024 am 06:39 AM

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

Samsung Galaxy S24 FEは、4色と2つのメモリオプションで予想よりも低価格で発売されると請求されています Samsung Galaxy S24 FEは、4色と2つのメモリオプションで予想よりも低価格で発売されると請求されています Sep 12, 2024 pm 09:21 PM

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

Xiaomi Redmi Note 14 Pro Plusは、Light Hunter 800カメラを搭載した初のQualcomm Snapdragon 7s Gen 3スマートフォンとして登場します Xiaomi Redmi Note 14 Pro Plusは、Light Hunter 800カメラを搭載した初のQualcomm Snapdragon 7s Gen 3スマートフォンとして登場します Sep 27, 2024 am 06:23 AM

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 Razr 50s は初期リークで新たな予算を折り畳める可能性があることを示す Motorola Razr 50s は初期リークで新たな予算を折り畳める可能性があることを示す Sep 07, 2024 am 09:35 AM

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

See all articles