Programming

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もプロジェクトファイルに入っていますが。

また、 本当に日本語のページがない中で、さめたすたすさんのページのおかげて大変助かりました。ありがとうございました(m__m

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

PAGE TOP