QtでKeyEventを送信②
こちらは、前回の続きです。前回のコードをQtに埋め込むやり方は、「さめたすたす」さんのページを参考にさせていただきました。
Qtの埋め込み方のリンクはこちら
こちらによると、まずKeyEventの送信部分はObjective-Cのファイル識別子[mm」でファイルを作成。そして、このファイルをOBJECTIVE_SOURCESとしてプロジェクトファイルに追加、また「ApplicationServices」というMacのフレームワークが必要な為、プロジェクトファイルにリンクも書き込みます。プロジェクトファイルはこんな感じです。
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = ShortcutSample
TEMPLATE = app
DEFINES += QT_DEPRECATED_WARNINGS
SOURCES += \
main.cpp \
mainwindow.cpp \
qkeyeventsend.cpp \
qkeyeventsendwin.cpp
HEADERS += \
mainwindow.h \
qkeyeventsend.h \
qkeyeventsendmac.h \
qkeyeventsendwin.h
FORMS += \
mainwindow.ui
OBJECTIVE_SOURCES += \
qkeyeventsendmac.mm
macx: LIBS += -framework ApplicationServices
こちらでビルド出来たのですが、いざ実行してみると、以下のようなエラーが出てクラッシュしてしまいました。
Non-fatal error enumerating at <private>, continuing: Error Domain=NSCocoaErrorDomain Code=260 "ファイル"PlugIns"は存在しないため、開けませんでした。
このエラーどうも権限系のエラーでMacにフリーソフトをインストールした時にもたまに出るらしいです。こちらも調べまくり色々やってみたんですが解決せず、そういえば上記の「さめたすたす」さんのサンプルコードがGitに載せてあったので、そちらに組み込んで試してみました。Qtをデバッグモードで実行するとうんともすんとも言わないで何も起きないのですが、リリースにしアプリケーションフォルダにコピーし起動したところ権限を許可するか否かの点でOSからメッセージが出てきました。「アクセシビリティ」という権限をアプリに許可すると上手くいったみたいです。希望が出てきたという事で私のサンプルと何が違うんだということで色々やってみた結果、NSObjectというクラスから派生させたクラスで作らないといけなかったみたいです。英語のページのサンプルコードはみんなC言語で書いてあったのに。。という事で完成したサンプルプロジェクトをこちらに載せました。MIDIの送信テストもするので、以前紹介したQMidiもプロジェクトファイルに入っていますが。
Qt KeyEvent Sample
また、 本当に日本語のページがない中で、さめたすたすさんのページのおかげて大変助かりました。ありがとうございました(m__m