投稿

Qtで作るAndroidアプリケーション

AndroidでQtアプリケーションを実行するまで でアプリケーションの実行ができるようになったので、実際にアプリケーションを作る際のポイントを記す 必要ないこともあるかと思うが、今現在動いているものである プロジェクトの作成  前ので書いたとおりプロジェクトの作成時に対象端末用のAndroidキットを指定する デザイナでの配置  Android上でデザインが変わることもあるが、ウィジェットは同じ様に配置できる  ただしレイアウト上に置かないと配置が崩れるので注意 AndroidManifest.xmlの配置  一旦実行した後にプロジェクトフォルダ内の android-build フォルダを開き AndroidManifest.xml をコピーしてくる プロジェクトフォルダに android-sources フォルダを作成しコピーした上記ファイルを貼り付ける Qtに戻りサイドバーのプロジェクトから「既存のファイルを追加」を選択し android-sources フォルダ内の AndroidManifest.xml を指定する アイコンの設定  上記で追加したAndroidManifest.xmlをダブルクリックでAndroid Manifestエディタで開かれる  「アプリケーションアイコン」で大中小のアイコンを設定できる Javaクラスを読み込む  Qtのコードのみで出来る部分もあるが、Androidの設定に関わることなど出来ないことも多い  そのためQtからJavaのコードを実行する仕組みが用意されている  AndroidManifest.xmlをダブルクリックでAndroid Manifestエディタを開きパッケージ名を確認  以下を参考にフォルダを作成 パッケージ名  org.qtproject.example.TestApp 作成するフォルダ  プロジェクトフォルダ/android-sources/src/org/qtproject/example/TestApp このフォルダ内に.javaファイルを作成 内容はアプリケーションによるが一応枠組みのサンプルを記載 サンプ...

AndroidでQtアプリケーションを実行するまで

イメージ
QtはAndroidアプリの作成に対応しており、PC用のアプリケーションと同じように作ることが出来る やりたいことによってはJavaのコードを書く必要もあるが 基本的なことは出来るので、普段Qtを使っている人にはいいだろう でもJavaが使えるのであればJavaで書いたほうがよっぽど楽で良い JDKのインストール  既にインストールされているかもしれないが、今現在入ってるものは   jdk8-openjdk  8   jre8-openjdk  8 Android Studioのインストール  これの設定画面にある  「Android SDK」->「SDK Platform」で 対象バージョンのSDKを入れる  別タブの「SDK Tools」で   Android SDK Build-Tools   Android SDK Platform-Tools   Android SDK Tools   NDK  の4つを入れる Qtのインストール  ManjaroにもQtとQtCreatorのパッケージは存在するが、それでは動かない  Android用のファイルが入っていないためにキットが検出されないのだ  そこで、 Qt公式 からインストーラのqt-opensource-linux-x64-5.12.2.runをダウンロードする  使用したのは上記のオフラインインストーラだが、 ここから オンラインインストーラをダウンロードしても問題ないかと思う ※5.12を入れたところ表面上は問題なかったが、実行時にQPushButtonの長押しなどで QMetaObject::invokeMethod: No such method QPushButton::inputMethodQuery(Qt::InputMethodQuery,QVariant) と出てしまい長押し処理が中断されてしまう現象が発生した 5.9では問題ないので、この問題が発生する場合は 最下の AndroidでQtアプリケーションを実行する方法Old を参照すること...

マジックSysRqキー(Magic SysRq key)の有効化と永続化

近頃、公式から許可をもらいスタンドアロン化した S.T.A.L.K.E.R. Anomaly というStalkerのModで遊んでいるが このゲームをやっていると急に止まることがある ゲームが落ちたりフリーズするだけではなく、PC自体がフリーズしてしまうのだ Alt+F4やAlt+Tabも効かないので、ゲームを閉じることもウィンドウを切り替えることも出来ない ゲームが悪いのか、Wineが悪いのか、中古のグラボが悪いのかはわからないが、突然なんの操作もできなくなるのは困る 経験則からファイルの保存を先延ばしにしたりしないし 最近のブラウザは異常終了後にタブの復元を行ってくれるのでこれらは問題ない しかし何より怖いのはSSDやHDDやUSBメモリの破損である 果たしてSSDが強制終了に強いのか弱いのかは知らないが、良い影響を及ぼさないのは確実だろう 実際に強制終了後の起動時にはfsckのログが多数流れるので心臓にもよろしくない そこで出来るだけ安全に再起動させるのが、このマジックSysRqキーである これはカーネルレベルでコマンドを実行させることで ウィンドウマネージャやX11がフリーズしても特定の操作ができるようになっている・・・・らしい この時使うキーがSysRqなのでマジックSysRqキーと呼ぶようだ 実行方法は以下のキーを一定時間を開け、上から順番に押していく  基本的にSysRqキーはAltとPrintScreenの組み合わせなので書いているが違う場合もあるらしい キー 意味 説明  Alt + PrintScreen + R   unRaw  キーボードの制御を取り戻す オマジナイ?  Alt + PrintScreen + E   tErminate  すべてのプロセスに正常終了命令を送る  Alt + PrintScreen + I   kIll  すべてのプロセスに 強制 終了命令を送る  Alt + PrintScreen + S   Sync  書き込み予定のキャッシュをすべて書き込む ...

Qtでのカスタムウィジェットの作り方

イメージ
Qtには便利なウィジェットが数多く用意されているが、それぞれに適した機能のみが実装されている 描画についてはQt Style Sheetsによって、強力なカスタマイズが可能だが 対応しているプロパティは限定的であり、動的な変更に向かない、また対象環境を考慮しづらいのが欠点である 対象環境を考慮しづらいというのは例えば、QLabelの背景色に白を想定し、枠線色をスタイルシートで黒に設定するとしよう これがもしユーザーのテーマの背景色が黒だった場合に色が同化し枠線の意味をなくしてしまう これを防ぐために背景色をスタイルシートで白に固定させると今度は文字色が被り、文字色を黒に設定する必要が・・・となってしまう 左から想定、テーマが黒、背景色を白指定 しかし、カスタムクラス化し描画やイベント時の動作を書き加えることで、より広範囲にカスタマイズすることが可能だ 例としてQSliderをカスタムクラス化し、文字を表示できるよう順を追って説明していく まず通常が画像のようになっているがこれに文字を追加するにはQSliderのカスタムクラスを作成する //ヘッダ class CustomSlider : public QSlider { Q_OBJECT public: explicit CustomSlider(QWidget *parent = nullptr); explicit CustomSlider(Qt::Orientation orientation, QWidget *parent = nullptr); protected: void paintEvent(QPaintEvent *e) //描画を行う }; //ソース CustomSlider::CustomSlider(QWidget *parent) : QSlider(parent) { } CustomSlider::CustomSlider(Qt::Orientation orientation, QWidget *parent) : QSlider(parent) { setOrientation(orientation); } CustomSlider:paintEvent(QPaintEvent *e) { QS...

Qt Creator 4.7が遅い

Qt Creator 4.7のテキスト編集が遅い Qt Creator 4.7にバージョンアップされて時間が経っている上に、既にArchの方では4.7.1が出ているので、解消されるかもしれないが念の為 Qt Creator 4.7でコードを書いていると、変数名や関数名などの色付けが遅れることが多発する それはまだ良いのだが、補完候補の表示も遅れるので非常に苦痛 解消するには メニューの [ヘルプ] から [プラグインについて] を押下し開いたウィンドウから ClangCodeModel のチェックを外し再起動 ただ、今後高速化の可能性もあるので、変更したことは覚えておくこと

Manjaro Linuxでパッケージのダウンロードが遅い場合の対処法

Manjaro Linuxでpacmanパッケージのダウンロードが遅い pacmanパッケージのダウンロードを行う際には自動的にミラーサーバからダウンロードが行われる しかし、このミラーが適切に設定されていないとダウンロードに非常に時間がかかる Manjaro XfceやMateエディションを使用している場合、pacmanのGUIフロントエンドとしてpamacがインストールされており、その設定画面からミラーの設定と更新ができる ここで更新したミラーサーバの内容は /etc/pacman.d/mirrorlist で確認できる しかし、ここで取得したにも関わらず知らぬ間にダウンロード速度が遅くなっている場合がある 上記のmirrorlistを確認してみると、日本から遠いミラーに設定されてしまっている これはGUIフロントエンドのpamacのサービスが定期実行されており、自動的にミラーの更新が行われている事が原因である サービスの内容は /usr/lib/systemd/system/pamac-mirrorlist.service で確認できる このファイルを上書きすることも出来るが、pamacが更新されると内容も戻ってしまう そのためドロップインファイルを作成することで適用させる  下記はその方法 まず適当なテキストエディタに上記 /usr/lib/systemd/system/pamac-mirrorlist.service の内容を貼り付け、その中の ExecStart=/usr/bin/pacman-mirrors -f8 と書かれているところを ExecStart=/usr/bin/pacman-mirrors --country all に書き換え   そうしたら端末で sudo systemctl edit pamac-mirrorlist を実行、するとおそらくnanoで編集が始まるので、上記で書き換えたテキストエディタの内容を貼り付けし書き込みを行う   ちなみにnanoエディタの下部に表示されているショートカットの ^ はCtrlキーを押すことである   つまり貼り付けの ^U は Ctrl+U 、書き込みの ^O は Ctrl+O でそれぞれ実行できる ...

PlayOnLinuxでインストールリストが表示されない場合の対処法

PlayOnLinuxでインストールボタンを押しても読み込み中のまま進まない場合の対処法 PlayOnLinuxにはインストールするアプリケーションを選択するリストがあるが インストールボタンを押しても読み込み中のまま表示されない 端末から開いてみると Exception in thread Thread-1: Traceback (most recent call last):   File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner     self.run()   File "mainwindow.py", line 111, in run     self.real_check()   File "mainwindow.py", line 78, in real_check     self.sendToStatusBar(_('Refreshing {0}').format(os.environ["APPLICATION_TITLE"]), True) KeyError: '0 ' このようなエラーが出力されている この場合の対処法は以下の通り /usr/share/playonlinux/python/mainwindow.py を管理者権限のテキストエディタで開く 例 Ubuntu gksudo leafpad /usr/share/playonlinux/python/mainwindow.py Ubuntu Mate gksudo pluma /usr/share/playonlinux/python/mainwindow.py Linux Mint 18 gksudo xed /usr/share/playonlinux/python/mainwindow.py 78行目の self.sendToStatusBar(_('Refreshing {0}').format(os.environ["APPLICATION_TITLE"]), Tru...