【Qt GUI徹底解説】QPointingDevice::QPointingDevice()のしくみと使い方


QPointingDevice::QPointingDevice() は、マウス、タッチスクリーン、タブレットなどのポインティングデバイスを表す QPointingDevice クラスのコンストラクタです。このコンストラクタは、新しい無効なポインティングデバイスインスタンスを作成し、オプションでその特性を指定するために使用されます。

構文

QPointingDevice::QPointingDevice(QObject *parent = nullptr);
QPointingDevice::QPointingDevice(const QString &name, qint64 deviceId, QInputDevice::DeviceType type, QPointingDevice::PointerType pointerType, QInputDevice::Capabilities capabilities, int maximumTouchPoints, int minimumTouchPoints, const QString &manufacturer, QPointingDeviceUniqueId uniqueId, QObject *parent = nullptr);

パラメータ

  • uniqueId (**QPointingDeviceUniqueId): ポインティングデバイスの一意なIDを指定します。デフォルト値は空のQPointingDeviceUniqueId` です。
  • manufacturer (**const QString&`): ポインティングデバイスの製造元を指定します。デフォルトでは空文字列です。
  • minimumTouchPoints (**int`): ポインティングデバイスが同時にサポートする最小タッチポイント数を指定します。デフォルト値は 0 です。
  • maximumTouchPoints (**int`): ポインティングデバイスが同時にサポートできる最大タッチポイント数を指定します。デフォルト値は 0 です。
  • capabilities (**QInputDevice::Capabilities`): ポインティングデバイスの機能をビットフラグで指定します。デフォルト値は 0 です。
  • pointerType (**QPointingDevice::PointerType): ポインティングデバイスのポインタタイプを指定します。デフォルト値はUnknown` です。
  • type (**QInputDevice::DeviceType): ポインティングデバイスの種類を指定します。デフォルト値はUnknown` です。
  • deviceId (**qint64`): ポインティングデバイスのデバイスIDを指定します。デフォルト値は -1 です。
  • name (**const QString&`): ポインティングデバイスの名前を指定します。デフォルトでは空文字列です。
  • parent (**QObject*`): ポインティングデバイスの親オブジェクトを指定します。デフォルトでは nullptr です。

戻り値

このコンストラクタはオブジェクトを構築し、ポインティングデバイスを表す QPointingDevice インスタンスを返します。

// マウスデバイスを作成する
QPointingDevice *mouseDevice = new QPointingDevice("My Mouse", 12345, QInputDevice::Mouse, QPointingDevice::Mouse, QInputDevice::MousePointer, 2, 1, "Logitech", QPointingDeviceUniqueId(), nullptr);

// タッチスクリーンデバイスを作成する
QPointingDevice *touchscreenDevice = new QPointingDevice("My Touchscreen", 54321, QInputDevice::TouchScreen, QPointingDevice::Touch, QInputDevice::TouchScreenPointer, 10, 1, "Samsung", QPointingDeviceUniqueId(), nullptr);
  • QPointingDevice クラスは、アプリケーションによって直接インスタンス化されるのではなく、プラットフォームまたは汎用プラグインによって登録されます。
  • ポインティングデバイスに関するイベントは、QPointerEvent クラスを使用して処理されます。
  • QPointingDevice クラスは、Qt GUI モジュールの QtGui ヘッダーファイルで定義されています。


#include <QApplication>
#include <QPointingDevice>
#include <QMouseEvent>

class MyWidget : public QWidget {
public:
    MyWidget(QWidget *parent = nullptr);

protected:
    void mousePressEvent(QMouseEvent *event) override;
};

MyWidget::MyWidget(QWidget *parent) : QWidget(parent) {
    setMouseTracking(true);
}

void MyWidget::mousePressEvent(QMouseEvent *event) {
    if (event->pointingDevice()->deviceType() == QInputDevice::Mouse) {
        qDebug() << "マウスがクリックされました: " << event->button();
    } else if (event->pointingDevice()->deviceType() == QInputDevice::TouchScreen) {
        qDebug() << "タッチスクリーンがタップされました: " << event->touchPointId();
    }
}

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    MyWidget widget;
    widget.show();

    return app.exec();
}

このコードを実行すると、マウスまたはタッチスクリーンを使用してウィジェットをクリックすると、コンソールにログメッセージが表示されます。メッセージには、クリックされたボタンまたはタッチされたポイントの ID が含まれます。



QPointerEvent::device() を使用する

QPointerEvent には、イベントが発生したポインティングデバイスを表す QPointingDevice ポインタが含まれています。このポインタを使用して、デバイス固有の特性にアクセスしたり、デバイスに固有のイベントを処理したりすることができます。

void mousePressEvent(QMouseEvent *event) {
    QPointingDevice *device = event->pointingDevice();

    if (device->deviceType() == QInputDevice::Mouse) {
        qDebug() << "マウスがクリックされました: " << event->button();
    } else if (device->deviceType() == QInputDevice::TouchScreen) {
        qDebug() << "タッチスクリーンがタップされました: " << event->touchPointId();
    }
}

QInputDevice::primaryPointerDevice() を使用する

この関数は、現在の入力システムでプライマリポインティングデバイスと見なされる QPointingDevice インスタンスを返します。これは、通常、ユーザーが現在使用しているマウスまたはタッチスクリーンデバイスです。

QPointingDevice *primaryDevice = QInputDevice::primaryPointerDevice();

if (primaryDevice) {
    qDebug() << "プライマリポインティングデバイス: " << primaryDevice->name();
}

プラットフォーム固有の API を使用する

一部のプラットフォームでは、QPointingDevice インスタンスにアクセスするためのプラットフォーム固有の API が提供されています。これらの API は、プラットフォームのドキュメントで確認する必要があります。

  • プラットフォーム固有の API を使用する場合、異なるプラットフォーム間でコードの移植性を確保するために注意が必要です。
  • ポインティングデバイスのリストは、システム構成によって変更される可能性があります。
  • QPointingDevice インスタンスは、アプリケーションによって直接インスタンス化されるのではなく、プラットフォームまたは汎用プラグインによって登録されます。