QSocketNotifier Class
QSocketNotifier クラスは、ファイルディスクリプタ上のアクティビティを監視するための機能を提供します。詳細...
| ヘッダー: | #include <QSocketNotifier> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| 継承元: | QObject |
- 継承されたメンバーを含むすべてのメンバーの一覧
- 非推奨のメンバ
- QSocketNotifier は、ネットワークプログラミング APIおよび入出力・ネットワークの一部です。
パブリック型
| enum | Type { Read, Write, Exception } |
パブリック関数
(since 6.1) | QSocketNotifier(QSocketNotifier::Type type, QObject *parent = nullptr) |
| QSocketNotifier(qintptr socket, QSocketNotifier::Type type, QObject *parent = nullptr) | |
| virtual | ~QSocketNotifier() |
| bool | isEnabled() const |
(since 6.1) bool | isValid() const |
(since 6.1) void | setSocket(qintptr socket) |
| qintptr | socket() const |
| QSocketNotifier::Type | type() const |
パブリックスロット
| void | setEnabled(bool enable) |
シグナル
| void | activated(QSocketDescriptor socket, QSocketNotifier::Type type) |
再実装された保護関数
| virtual bool | event(QEvent *e) override |
詳細な説明
QSocketNotifier を使用すると、Qt のイベントループを、ファイルディスクリプタに基づく他のイベントループと統合することが可能になります。ファイルディスクリプタによるアクションは、Qt のメインイベントループ(QCoreApplication::exec())で検出されます。
低レベル(通常はプラットフォーム固有)のAPIを使用してデバイスを開いたら、そのファイル記述子を監視するためのソケット通知機能を作成できます。 記述子が通知器のコンストラクタに渡されると、ソケット通知器はデフォルトで有効になります。つまり、そのタイプに対応するソケットイベントが発生するたびに、activated() シグナルを発行します。activated() シグナルを、ソケット通知器のタイプに対応するイベントが発生した際に呼び出したいスロットに接続してください。
記述子が割り当てられていない状態でソケット通知機能を生成することも可能です。この場合、記述子を取得した後で、setSocket() 関数を呼び出す必要があります。
ソケット通知器には、read、write、exceptionの3つのタイプがあります。タイプはType 列挙型で定義されており、ソケット通知器の構築時に指定する必要があります。構築後は、type()関数を使用してタイプを判別できます。 なお、同じファイル記述子に対して読み取りと書き込みの両方を監視する必要がある場合は、2つのソケット通知器を作成する必要があります。また、同じソケットに同じタイプのソケット通知器(Read 、Write 、Exception )を2つ設定することはできない点にも注意してください。
setEnabled() 関数を使用すると、ソケット通知機能を有効化および無効化できます。一般に、特に書き込み通知機能については、ソケット通知機能を明示的に有効化または無効化することをお勧めします。無効化された通知機能はソケットイベントを無視します(ソケット通知機能を作成しない場合と同じ効果です)。isEnabled() 関数を使用して、通知機能の現在の状態を確認してください。
最後に、socket() 関数を使用して、ソケット識別子を取得できます。このクラスは QSocketNotifier と呼ばれていますが、通常はソケット以外の種類のデバイスに使用されます。QTcpSocket およびQUdpSocket はシグナルを通じて通知を行うため、通常、これらに対して QSocketNotifier を使用する必要はありません。
QFile 、QProcess 、QTcpSocket 、およびQUdpSocketも参照してください 。
メンバ型のドキュメント
enum QSocketNotifier::Type
この列挙型は、ソケット通知機能が認識できるさまざまなイベントの種類を表します。ソケット通知機能を構築する際には、このタイプを指定する必要があります。
なお、同じファイル記述子に対して読み取りと書き込みの両方を監視する必要がある場合は、2つのソケット通知器を作成する必要があります。また、同じソケットに同じタイプ(Read、Write、Exception)のソケット通知器を2つインストールすることはできない点にも注意してください。
| 定数 | 値 | 説明 |
|---|---|---|
QSocketNotifier::Read | 0 | 読み取るデータがあります。 |
QSocketNotifier::Write | 1 | データを書き込むことができます。 |
QSocketNotifier::Exception | 2 | 例外が発生しました。この関数の使用は推奨されません。 |
関連項目: QSocketNotifier() およびtype()。
メンバ関数のドキュメント
[explicit, since 6.1] QSocketNotifier::QSocketNotifier(QSocketNotifier::Type type, QObject *parent = nullptr)
指定されたtype を使用して、記述子が割り当てられていないソケット通知オブジェクトを構築します。parent 引数は、QObject のコンストラクタに渡されます。
監視対象のディスクリプタを設定するには、setSocket() 関数を呼び出します。
この関数は Qt 6.1 で導入されました。
setSocket()、isValid()、およびisEnabled()も参照してください 。
QSocketNotifier::QSocketNotifier(qintptr socket, QSocketNotifier::Type type, QObject *parent = nullptr)
指定されたparent を使用してソケット通知機能を構築します。これにより、socket が有効になり、指定されたtype のイベントを監視します。
一般に、特に書き込み通知機能については、ソケット通知機能を明示的に有効または無効にすることをお勧めします。
Windows ユーザーへの注意:QSocketNotifier に渡されたソケットは、たとえブロッキングソケットとして作成されたものであっても、ノンブロッキングになります。
setEnabled() およびisEnabled()も参照してください 。
[virtual noexcept] QSocketNotifier::~QSocketNotifier()
このソケット通知機能を破棄します。
[private signal] void QSocketNotifier::activated(QSocketDescriptor socket, QSocketNotifier::Type type)
このシグナルは、ソケット通知機能が有効になっており、そのtype に対応するソケットイベントが発生した際に発せられます。
ソケット識別子は、socket パラメータとして渡されます。
注:これは プライベートシグナルです。シグナル接続では使用できますが、ユーザーが発行することはできません。
注:この シグナルは オーバーロードされています。このシグナルに接続するには:
// Connect using qOverload:
connect(socketNotifier, qOverload(&QSocketNotifier::activated),
receiver, &ReceiverClass::slot);
// Or using a lambda:
connect(socketNotifier, qOverload(&QSocketNotifier::activated),
this, [](QSocketDescriptor socket, QSocketNotifier::Type type) { /* handle activated */ }); [override virtual protected] bool QSocketNotifier::event(QEvent *e)
QObject::event(QEvent *e) を再実装します。
bool QSocketNotifier::isEnabled() const
通知機能が有効になっている場合は `true ` を返し、そうでない場合は `false` を返します。
setEnabled()も参照してください 。
[since 6.1] bool QSocketNotifier::isValid() const
通知オブジェクトが有効である場合(つまり、記述子が割り当てられている場合)、true を返します。そうでない場合は、false を返します。
この関数は Qt 6.1 で導入されました。
setSocket()も参照してください 。
[slot] void QSocketNotifier::setEnabled(bool enable)
enable がtrueの場合、通知機能は有効になります。そうでない場合は無効になります。
通知機能が有効になっている場合、そのtype に対応するソケットイベントが発生するたびに、activated()シグナルを発生させます。無効になっている場合は、ソケットイベントを無視します(ソケット通知機能を作成しない場合と同じ効果です)。
書き込み通知機能は、通常、activated() シグナルが発信された直後に無効化されるべきです
isEnabled() およびactivated()も参照してください 。
[since 6.1] void QSocketNotifier::setSocket(qintptr socket)
この通知機能にsocket を割り当てます。
注: 副作用として、この 通知機能は無効化されるため、再度有効にする必要があります。
この関数は Qt 6.1 で導入されました。
関連項目: socket()、setEnabled()、およびisValid()も参照してください 。
qintptr QSocketNotifier::socket() const
このオブジェクトに割り当てられたソケット識別子を返します。
setSocket()、isValid()、およびtype()も参照してください 。
QSocketNotifier::Type QSocketNotifier::type() const
コンストラクタで指定されたソケットイベントタイプを返します。
socket()も参照してください 。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.