ステレオタイプオタクのモラトリアム脱出話だった初代から考えると、なんかスゴイ今風にリファインされててスゴイなぁ、と。
この引きだと斑目さんの精神的葛藤は次巻で多少なりと補足されるのかと思いたいけど、どうなんだろう・・・
ステレオタイプオタクのモラトリアム脱出話だった初代から考えると、なんかスゴイ今風にリファインされててスゴイなぁ、と。
この引きだと斑目さんの精神的葛藤は次巻で多少なりと補足されるのかと思いたいけど、どうなんだろう・・・
本当は先月(#35)も参加したかったのですが、ESECやらde:codeやら対応してて死にました。
monoist.atmarkit.co.jp
コレはコレで「なんかいい感じに~」とか言われて
シャチョサンに大してワタシが(たまに)思うことhttps://t.co/7N5Q7pUr92
— Yuya Adachi (@moguriso) 2016年5月10日
某社のデバイスで遊ぶというミッションが出来たのでAndroidアプリを触る必要が生じたのですが、Qt勉強会でAndroidStudioと戯れるわけにも行かないのでQt+Androidで遊んでいました。
取り敢えず普通に動く所までやっと環境が出来ました #qtjp https://t.co/kfzoYz1Hs6
— Yuya Adachi (@moguriso) 2016年6月18日
github.com
本来はタップが取りたかったのですが、当日中はここまでしか出来ませんでした
懇親会。ご飯が来ない #qtjp pic.twitter.com/uN8cy5jU8h
— Yuya Adachi (@moguriso) 2016年6月18日
なんかもう、まさに↓
最近イベントやオフで萌え語りをしたり、すごい人と相互になったり、リプを交わしてうひょーと舞い上がった後に襲ってくる感覚 pic.twitter.com/at3ZbovF8s
— 実依 (@miiiko0) 2016年6月17日
珍しく続いておりますが、割と暇で仕事中にやってるからと言うのは秘密です
知る限り一番の近道は@task_jpさんのTwitter4QMLを使うことだと思われます
はりきらないひと: 【一夜漬け】Twitter4QMLを使ってみようか。
艦メモのビルド方法(Windows編) - 理ろぐ
使ってみようとpriをプロジェクトに追加してブログ記事とコードをにらめっこしておりましたが実力不足でついていけないのでTwitterにポストするだけの低機能クラスを作ることにしました。
3-legged authorization | Twitter Developers
Twitter APIの使い方まとめ
取り敢えずHTTPのPOSTメッセージが出せればなんとなくやった気になれるのかな・・・?
取り敢えずブラウザのウィジェットでWeb表示して内容をPostすればいいんじゃないかと妄想してWebViewについて頑張って調べました。何だかんだ錯綜していて色々な情報が集まるわりに全部うまく行かずで、結論としては
ので、つまるところ VS2013 のコンパイラを入れて切り替えて
#include <QtWebEngineWidgets/QWebEngineView> { QWebEngineView* WebView = new QWebEngineView(); QUrl url = "https://www.google.co.jp"; WebView->load(url); WebView->show(); }
的な感じで取り敢えず表示は出来た。(本日時点のコードはadd some modifications · moguriso/gawa_sample@4e232cc · GitHub)
WebViewはViewなので、HTMLの中身に対して何らかいじって表示したりは出来そうですが、HTTPのPOST/GETしたりのネットワーク的な機能は別のクラスだった、と、6/17に書いてて気付きました。悲しい、、、
この辺を参照する限り QNetworkAccessManager で出来るの、かなぁ。。。
gccだと__func__マクロで自動的に関数名に置換してくれるのですがvc(vs2013)だと__func__がなくて全部ビルドエラーになりました。取り敢えず__FUNCTION__は通ったのでそっちにしてますが、何だかな。。。
全然サクッとした気にならなくなった今日このごろですが。
add qrc resource file for embedding vbscript file · moguriso/gawa_sample@cdfb734 · GitHub
Issues · moguriso/gawa_sample · GitHub
はっきりわかってるのは2件。次トラックボタンを連打するとアプリが応答不能になる問題もあったけれど、QAxScriptのentered/finishで排他制御する適当な修正で取り敢えず再現しなくなっているみたいなので外す。
起動時の画面サイズ調整が出来ていない · Issue #1 · moguriso/gawa_sample · GitHub
起動直後のpaintEvent(graphicsviewの方)が来ない(MainWindowsには来てるはず)のでQImageにアートワークがロードされずサイズが0x0になるのが問題っぽい。取り敢えずMainWindowのコンストラクタでQImageにアートワークを読ませてみましたが。。。
どうもupdateImageでQImageをnewしまくるバグが有る気がするのだけど不用意にdeleteするとそもそも画像がロードされなくなるので取り敢えず現状の感じに直してますが、コレも良いのかどうか、、、
要約するとなんとなく動いているけど、これでいいのか分かってません。。。
次トラック移動を複数回行うと画像サイズがおかしくなる場合がある · Issue #2 · moguriso/gawa_sample · GitHub
アートワークのサイズになるようにウィンドウサイズを調整しようとすると、アートワークサイズがグチャグチャでシッチャカメッチャカになるので、ウィンドウサイズにアートワークサイズをあわせる様に修正。
1.graphicsviewのサイズを強引に書き換えるだけだとジャギが目立つ(縦横比が合っててもジャギが出る) → 真面目にラスタとか入れるか別のクラスを間に挟んで補完させるかすれば解決するのかもしれないけど 直近どうでもいいのでissueにあげて保留にする
2.ウィンドウのサイズを固定にしたかったけどやり方がわからない
→取り敢えずサイズ変更ごとにアートワーク側のサイズを変える様にしているのでまあ良いかと3.厳密な意味でウィンドウサイズにアートワークサイズがフィットしてない
→ そのうち直したい気はする。取り敢えず動いてるから保留。
要約すると、面倒になったので仕様の方を直しました。
add Title display function · moguriso/gawa_sample@185c739 · GitHub
いろいろとイケテナイ感じは有るのですが、取り敢えず機能としては追加しました。
GUIをつけたら途端にサクッとじゃなくなりました、、、orz
本項の以降の文章はやったあと思い出しながら書いているので誤りを含む可能性が多々あります。
処理の簡単な流れとしては
のが最初の流れです。追加して”次トラックに移動したら次トラックのアートワークに差し替える”とかやりたいことは色々ありますが、基本はこの流れの応用になる、はず、です。。。
ひとまず現状から書くと...もろもろバグってます。
サクッとプログラムした気になる (3) - Tizen には moe ていない blogからの変更箇所はadd some function for viewing artwork on GUI · moguriso/gawa_sample@ad65a01 · GitHubの通りです。
いろいろ弄くり過ぎてシッチャカメッチャカになった感はありますが、大きな変更は下記の通りです。
細かい部分まで挙げると他にもあるかも知れませんが、取り敢えずざっくりと書くとこんな感じになります。(さっくりと書くと数行ですが実際には種々の試行錯誤が含まれており云々かんぬん・・・)
DisplayWidgetにGraphicsViewというのがあるので、なにも考えずにそこにファイルをloadしたら表示できるのかと思ったら出来ませんでした。いろいろハマったのですが、一番大きいのは以下のエラーで
QWidget::paintEngine: Should no longer be called QPainter::begin: Paint device returned engine == 0, type: 1
pushボタンの中でQImageをロードしてdrawImageしてたのが悪かったとのこと。
c++ - Unable to paint on Qt Widget, shows error "paintEngine: Should no longer be called" - Stack Overflow
この辺りを参考にさせていただいて諸々弄くったのが今のコードになります。。
月の杜工房 - Qt QImage画像を表示
QtでPNG画像を表示 - Narrow Escape
それとは別にハマったのが、
Set iTunesApp = CreateObject("iTunes.Application") Set current = iTunesApp.CurrentTrack Set artworks = current.Artwork Set artwork = artworks.Item(1) format = artwork.Format
このformat、一応正しく読めているらしき情報が来る(1:jpg, 2:png, 3:bmp。3は見たことありませんが、pngは結構あります)ので
Select Case format Case 1 c_str = "jpg" Case 2 c_str = "png" Case 3 c_str = "bmp" End Select
として、出力する拡張子を変えていた所、png画像の読み込みのcaseで100%エラーが出てQImageのloadに失敗していました。なんか、改めてファイルを確認したら、pngになっている画像データの冒頭部分が
(JFIF:jpg画像)
ArtworkのSaveArtworkToFileの仕様(Apple公式からダウンロード出来ないので正しい仕様かどうかわからなくなってますが)は
iTunes COM Interface: IITArtwork Interface Reference
ソレによると、アートワークの画像形式は保存されているものに従う様に書かれてるので、PNGが返って来てるのにJPGになることはなさそうな気がしますが・・・。取り敢えず
Select Case format Case 1 c_str = "jpg" Case 2 c_str = "jpg" 'c_str = "png" Case 3 c_str = "jpg" 'c_str = "bmp" End Select
ってやったら画像が”ある”場合で読み込み失敗することはなくなりました。
今のままでは、そもそもアートワークが”ない”音楽データのロードで挙動不審に陥ります。なので、そもそもアートワークが無い場合には”No Image”と文字を出すように暫定修正を追加します。GraphicsViewに文字を出す部分はこちらを参考にさせて頂き
QGraphicsViewの表面にテキストを表示するサンプル · GitHub
(Atsuhiさんのgistだった)
お情け程度に出てますが、要改善です。
割りとズブっとハマったのがVBScript側のバグで、なんかQAxScript関連でseg落ちするなと思ったら大体8割がたVBScrips側がバグってました、、、orz
珍しく前後編ちゃんと観ました。viva 映画館が同じ施設内に有る仕事場。
個人的には、大どんでん返しがあったかと言われると正直無かったと思うものの
全体的に登場人物、特に三上の主観で丁寧に作られていたんじゃないかと。
重箱の隅をつつき出すと言いたいことも多々有るはありますが、言わぬが花というやつでしょう、、、
次はクリーピー観に行こうかなぁ。
スクリプトだけだとアプリケーションにならないので呼び出してくれるガワを作りました。
普通に入れててVS入ってない場合はMinGWだけのはずですが、VSしたい場合はチェック(デバッグ用のWindowsSDK入れないとデバッガが無いと怒られました)
残りは「次へ」→「完了」
「フォーム」→「mainwindow.ui」をダブルクリック
こんな感じのはずなので、「Push Button」をドラックしてドロップ
追加したボタンで右クリックして「スロットへ移動」
clicked()でOK。
地味に大変。COMのスクリプトを呼び出すのはQAxScriptManagerとQAxScriptを使うそうで、、、
QAxScriptManager Class | Active Qt 5.7
mainwindow.hを↓(addが追加部分)
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QAxScriptEngine> //add #include <QAxScript> //add #include <QDebug> //add namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private slots: void on_pushButton_clicked(); private: Ui::MainWindow *ui; QString getArtworkPath(); //add void nextTrack(); //add QAxScriptManager *m_manager; //add QAxScript *m_script; //add }; #endif // MAINWINDOW_H
mainwindow.cppも↓な感じにいじる
#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { /* add (ここから) */ m_manager = new QAxScriptManager(this); bool isRegistered = m_manager->registerEngine("VBScript", "vbs"); if(isRegistered){ qDebug() << "OK to register VBScript"; m_script = m_manager->load("C:\\msys64\\home\\adachi\\test.vbs", "HelloWorld"); } else qDebug() << "NG to register VBScript"; /* add (ここまで) */ ui->setupUi(this); } MainWindow::~MainWindow() { /* add (ここから) */ if(m_script) delete m_script; if(m_manager) delete m_manager; /* add (ここまで) */ delete ui; } /* add (ここから) */ QString MainWindow::getArtworkPath() { QString rStr = ""; if (m_script){ QVariant var = m_script->call("getArtworkAndPath()"); qDebug() << var.toString() << "loaded"; rStr = var.toString(); qDebug() << "rstr = " << rStr; } else qDebug() << "didn't load"; return rStr; } void MainWindow::nextTrack() { if (m_script){ m_script->call("nextTrack()"); qDebug() << "loaded"; } else qDebug() << "didn't load"; } /* add (ここまで) */ void MainWindow::on_pushButton_clicked() { /* add (ここから) */ QString path; nextTrack(); path = getArtworkPath(); qDebug() << path; /* add (ここまで) */ }
"C:\\msys64\\home\\adachi\\test.vbs"のところは自分のファイルに置き換えが必要です。
ちゃんと出来ていればこんな感じになるはず。
写り込みの範囲内に収まりそうにないので動画は削除しましたm(_ _)m
アプリにしようと思うと、途端に面倒くさくなりました。