【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
インスタンスは、アプリケーションによって直接インスタンス化されるのではなく、プラットフォームまたは汎用プラグインによって登録されます。