続・QtQuick2でアプリ作ってみたよpost

勉強会の続きが結構かかってしまったけど何とかそれなりに形になりました。

もしくは、力尽きたともいうorz

QtQuick2 on MacQtQuick2 on Windows

とりあえず、完成までの流れおば

QtQuick2でUI描画を作成

勉強会ではここで力尽きました。

QtQuick2でCanvasエレメント上に円グラフを描き描きしてそれらしい形に。

後からTextエレメントでプロセス名の一覧とメモリの使用量を表示できるようにしました。

参考

QMLとC++の連携

最初作ったプロジェクトではどうもC++の関数が呼べなかったらしく少し回り道を、、、してしまったがプロジェクトを作り直して準備完了。

単純なQStringとかを返すのではなくいろんな情報を持つオブジェクトを返したかったので少し変わった事をしています。

TaskMemGraph/processlist.h at master - sharkpp/TaskMemGraph - GitHubTaskMemGraph/processinfo.h at master - sharkpp/TaskMemGraph - GitHub など で実装しているのですが、ProcessInfoクラスはQObjectから派生していて、Q_PROPERTYでプロパティーを定義しています。

こうすると、QML側では、

var v = item;
var yy = v.name;

みたいに呼び出せます。

で、ProcessListクラスもQObjectから派生していて、Q_INVOKABLEで必要なメソッドを定義してあります。

戻り値をQList<QObject*>で定義するとQML側では、

var v = hoge.data();
for(i in v) {
    var yy = v[i].name;
}

みたいに呼び出せます。

もちろん、

qmlRegisterType<ProcessInfo>("ProcessLib",1,0,"ProcessInfo");
qmlRegisterType<ProcessList>("ProcessLib",1,0,"ProcessList");

のような感じで型の登録が必要になります。

ただ、なかなか思ったような処理のやり方がわからず探し回りました。

参考

Macでのプロセス操作のプログラミング

ここから、完全に未知の領域です。

Macのプログラム、なにそれ?おいしいの?状態でしたが、、、そもそも、何をキーワードにして検索をすればいいかとか どこを見ればいいかとかが分からず、今回一番苦労したところです。

結局は、Apple Developerが総本山だったってことが分かったのですが、それにしても 目的の処理をしようとする方法も分からず???な状態でしたが、まあ、何とかなるもんです。

参考

Windowsでのプロセス操作のプログラミング

こっち側はまあAPIとかは少し探しましたが、まあそれなりで、、、

MSDNで日本語の内容も読めるし圧倒的に日本語の資料が多いので簡単です。

こういうところはユーザー数の違いが顕著に出ますね。

まとめ

初めてQtQuick2をやってみて、、、まあそれなりに手が動いたのはJavaScriptベースだったからでしょうか?

まだ、ちょっと自分の作りたい方向性のものとちょっと違うので、このままどっぷりはまっていくかというとそうでもなさそうですが、 雰囲気は掴めたので何かの時には、またを出しそうな感じです。

そもそも、初っ端からC++との連携とかMacのプロセス操作とかハードルが高すぎましたねorz

sharkpp/TaskMemGraph - GitHubでソースを公開していますがバイナリはなんかdllがたくさん必要なので公開していません。 主にサイズ的な制限で、、、Windows側は必要なDLLが総計40MBですってよorz

ちなみに、動かすのに管理者権限が必要になります。

Mac側は確実に、そして、Windows側はXPでしか試していないですが、恐らく管理者権限が必要だと思います。

Macで動かしたアプリのスクショです。

QtQuick2 on Mac

こっちはWindowsで動かしたアプリのスクショです。

QtQuick2 on Windows

自分で試してみたいという奇特な方は、sharkpp/TaskMemGraph - GitHubからソースを取得して遊んでみてください。

ではでは


   /   変更履歴  /   Permalink  /  このエントリーをはてなブックマークに追加 
 カテゴリ: ブログ  /   タグ: C++, Qt, Qtで遊ぶ, QtQuick