QSocketNotifier Class

QSocketNotifierクラスは、ファイル・ディスクリプタのアクティビティを監視するためのサポートを提供します。詳細...

Header: #include <QSocketNotifier>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
Inherits: QObject

パブリック型

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()シグナルは、ソケットノーティファイアのタイプに対応するイベントが発生したときに呼び出されたいスロットに接続する。

ディスクリプタを割り当てずにソケットノーティファイアを作成することもできる。この場合、ディスクリプタを取得した後にsetSocket() 関数を呼び出す。

ソケットノーティファイアには、読み込み、書き込み、例外の 3 種類がある。タイプはType enum で記述され、ソケットノーティファイアを構築する際に指定しなければならない。構築後、type() 関数を使用して決定できる。同じファイルディスクリプタの読み込みと書き込みの両方を監視する必要がある場合、ソケットノーティファイアを 2 つ作成する必要がある。また、同じソケットに同じ型(Read,Write,Exception)の2つのソケットノーティファイアをインストールすることはできない。

setEnabled() 関数を使用すると、ソケット通知器を無効にしたり有効にしたりすることができる。一般に、特に書き込みノーティファイアでは、ソケットノーティファイアを明示的に有効または無効にするこ とが望ましい。無効化されたノーティファイアは、ソケットイベントを無視する(ソケットノーティファイアを作成し ないのと同じ効果)。ノーティファイアの現在のステータスを調べるには、isEnabled() 関数を使用する。

最後に、socket() 関数を使用してソケット識別子を取得することができる。このクラスは QSocketNotifier と呼ばれるが、通常はソケット以外のデバイスに使用される。QTcpSocketQUdpSocket はシグナルで通知を行うので、通常は QSocketNotifier を使用する必要はない。

QFileQProcessQTcpSocketQUdpSocketも参照のこと

メンバ・タイプのドキュメント

enum QSocketNotifier::Type

この列挙型は、ソケットノーティファイアが認識できる様々なイベントタイプを記述する。ソケットノーティファイアを構築する際に、タイプを指定する必要がある。

同じファイルディスクリプタの読み込みと書き込みの両方を監視する必要がある場合、2 つのソケットノーティファイアを作成する必要がある。また、同じソケットに同じタイプ(Read, Write, Exception)のソケットノーティファイアを2つ設置することはできない。

定数説明
QSocketNotifier::Read0読み込むデータがある。
QSocketNotifier::Write1データを書き込める。
QSocketNotifier::Exception2例外が発生しました。これを使用しないことを推奨する。

QSocketNotifier() およびtype()も参照のこと

メンバ関数ドキュメント

[explicit, since 6.1] QSocketNotifier::QSocketNotifier(QSocketNotifier::Type type, QObject *parent = nullptr)

与えられたtype でディスクリプタが割り当てられていないソケット通知器を構築する。引数parentQObject のコンストラクタに渡される。

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 パラメータにソケット識別子を渡す。

注: これはプライベートシグナルである。シグナル接続で使用することはできるが、ユーザが発することはできない。

注意:このクラスでは、Signalactivatedがオーバーロードされています。関数ポインタ構文を使用してこのシグナルに接続するために、Qtはこの例に示すように関数ポインタを取得する便利なヘルパーを提供しています:

connect(socketNotifier, QOverload<QSocketDescriptor, QSocketNotifier::Type>::of(&QSocketNotifier::activated),
    [=](QSocketDescriptor socket, QSocketNotifier::Type type){ /* ... */ });

type() およびsocket()も参照してください

[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 が真であれば、ノーティファイアは有効であり、そうでなければノーティファイアは無効です。

ノーティファイアが有効な場合、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() も参照

本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します このドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。