ラベル 艦これ の投稿を表示しています。 すべての投稿を表示
ラベル 艦これ の投稿を表示しています。 すべての投稿を表示

2013年11月5日火曜日

QQuickViewを子にもつQDialogをrootObjectのサイズで固定する方法はないものか・・・

艦コレ絶賛はまり中の隠者です。

先ほど、初めて撃沈を体験しました。改造直前だし、中破だけどイベントボス戦だから、いけるかなと思ったのですけど、がっかりです。最後にスクリーンショットとっておくべきでしたね・・・。

さて、そんな艦コレ専用ブラウザの艦メモですが、先日の記事に載せたように、タイマーダイアログが英語版だとうまくダイアログ内に収まっていませんでした。


このTimer Dialogですが、QDialogの中にQQuickViewを入れてあり、実際のダイアログはQMLで作成されています。Setで呼ばれる一覧等は、先日の日記の伊織さんのコメントから、ダウンロードされている事がわかりました。

で、このQDialogですが、uiファイルでサイズが固定にされていました。
しかし、後からQMLを変更したり、フォントなどの関係で、どうしてもQML部のサイズが事前に固定できない場合が出てきます。

さらにtimerDialog.qmlのrootのRectangleはサイズ指定がありません。内部のColumnに表示されるItemの分だけ自動でサイズが決まるようです。

QQuickViewの内部のコンテンツサイズを取得するにはどうしたらよいのでしょうか。QQuickView::rootObjectで、rootのQQuickItemを取得し、QQuickItem::childrenRect()を取り出せば、子のRectが入手できます。あとは、そのsizeに適度なマージンを入れて、QDialogのsetMinimumSizeとsetMaximumSizeに設定してあげれば、QMLのサイズに合わせてダイアログのサイズを固定できそうです。

void TimerDialog::showEvent(QShowEvent *event)
{
    Q_UNUSED(event);
    if(m_viewer == NULL){
        m_viewer = new QtQuick2ApplicationViewer(windowHandle());
        connect(m_viewer->engine(), SIGNAL(quit()), this, SLOT(closeQml()));

        //C++のデータをQML側へ公開
        m_viewer->rootContext()->setContextProperty("timerData", &m_timerdata);

        //QML設定して表示
        m_viewer->setSource(QUrl("qrc:///qml/KanmusuMemory/timerDialog.qml"));
        m_viewer->show();
        QSize contentSize = m_viewer->rootObject()->childrenRect().toRect().size() + QSize(DIALOG_MARGIN,DIALOG_MARGIN);
        setMinimumSize(contentSize);
        setMaximumSize(contentSize);
    }

}

childrenRectは、RectFを返すので、toRect()でRect化した後、size()を取って、それにマージンを加えています。

Githubには入れておきましたが、まだMacでしか確認していないので、修正をWindowsとLinuxで確認したらpull Requestしてみますか。


2013年10月30日水曜日

艦メモのメモ

先週の金曜日に、うっかり着任してしまい、艦コレはまり中の隠者です。

先日、開発者の @IoriAYANE さんから、Qtユーザー会の方でも開発者募集のメールが出ていた艦メモについて、メモ書きを残しておこうと思います。

まずは、伊織さんからのメッセージの転載。

> こんばんわ
> アプリはさくっと作ってさくっと放流の、いおりです。
> MLをもっとフランクに使っていこうぜって話題があったので。
>
>
> 艦メモという、DMMのゲーム「艦隊これくしょん」を遊ぶためのアプリを作ってます。
> ソースをGithubで公開しているので、もし艦これで遊んでてちょっといじってやるぜ!って
> 提督さんはぜひビルドしてみてください。
> そして、ぜひプルリクエストを送ってください!
> (チート機能は禁止ですよー、マクロとか)
>
> 艦これ
>
> 艦メモの紹介
>
> ビルド方法
>
> 艦メモのビルド方法(Windows編)
>
> 艦メモのビルド方法(Ubuntu編)
>
> 艦メモをビルドしてみた(MacOSX編)
>
> Github

続きまして、ディレクトリツリー。一度ビルドした後で取ったので、余計なものも入っているかもしれませんが。

KanmusuMemory
 - aboutdialog.cpp [いわゆるaboutダイアログ。貢献するとここにアカウント名が表示されるっぽい]
 - aboutdialog.h   [同上]
 - aboutdialog.ui  [同上]
 - cookiejar.cpp   [クッキー保存オブジェクト]
 - cookiejar.h     [同上]
 - favoritemenu.cpp [お気に入り機能、webpageform用かな?]
 - favoritemenu.h  [同上]
 - gamescreen.cpp   [キャプチャ時のGame画面切り出し?]
 - gamescreen.h     [同上]
 - i18n/ [翻訳ファイル - 伊織さんは英語で作ってから翻訳を作るそうです。すばらしぃ
   - qt_ja.qm
   - qt_ja_JP.qm
   - qt_ja_JP.ts
 - imageeditdialog.cpp  [画像編集ダイアログ]
 - imageeditdialog.h    [同上]
 - imageeditdialog.ui   [同上]
 - KanmusuMemory.icns
 - KanmusuMemory.ico
 - KanmusuMemory.pro [Qtのプロジェクトファイル。QtCreator使いはコレをQtCreatorで開く]
 - KanmusuMemory.qrc [Qtのリソース設定ファイル]
 - KanmusuMemory.rc  
 - kanmusumemory_global.h
 - LICENSE          [Apach2ライセンスですね]
 - main.cpp         [main関数はここ]
 - mainwindow.cpp   [main windowです]
 - mainwindow.h     [同上]
 - mainwindow.ui    [同上]
 - memorydialog.cpp [View Memoryダイアログ]
 - memorydialog.h   [同上]
 - memorydialog.ui  [同上]
 - qml/
   - KanmusuMemory/
     - ClipTool.qml
     - GradientEx.qml
     - imageEditDialog.qml
     - ImageEditView.qml
     - images/ 
       - spinner.png
     - js/
       - HttpAccess.js
     - memoryDialog.qml
     - test.qml
     - timerDialog.qml
     - TimerItem.qml
     - TimerSetting.qml
 - qtquick/
    - clipcursor.cpp
    - clipcursor.h
    - operatingsystem.cpp
    - operatingsystem.h
    - qfileasync.cpp
    - qfileasync.h
    - qmlfile.cpp
    - qmlfile.h
    - qtquick.pri
    - qtquick2applicationviewer.cpp
    - qtquick2applicationviewer.h
    - thumbnailprovider.h
    - timerdata.cpp
    - timerdata.h
 - README.md [githubでの説明用]
 - Readme.txt [艦メモについての説明書き]
 - resources/ 
   - alarm.mp3
   - downloaddata/
     - favoritedata.json
     - timerselectguide.json
     - timerselectguide_en.json
   - fav_icon_off.png
   - fav_icon_on.png
   - go_back.png
   - go_forward.png
   - icon.svg
   - KanmusuMemory128.png
   - KanmusuMemory16.png
   - KanmusuMemory256.png
   - KanmusuMemory32.png
   - KanmusuMemory48.png
   - KanmusuMemory512.png
   - KanmusuMemory64.png
   - KanmusuMemory80.png
   - KanmusuMemory96.png
   - mobile_icon.svg
   - mobile_icon_off.png
   - mobile_icon_on.png
   - reload.png
 - scripts/                [主にビルド後の配布パッケージ作成用スクリプト]
   - deb/                  [Ubuntu用debパッケージ作成用]
   - deploymac-dmg.sh      [dmgパッケージ作成用]
   - deploymac.sh          [Macデプロイ用スクリプト]
   - deploymaclibs.txt     [Macで利用するライブラリリスト]
   - deployubuntu.sh       [Ubuntuデプロイ用スクリプト] 
   - KanmusuMemory.sh 
   - macdeployhelper510.sh [deploymac.shから呼び出される]
   - Readme.txt            [Macデプロイスクリプトについて]
   - translate.bat         [lupdate呼び出し簡略化用?]
 - settingsdialog.cpp      [設定ダイアログ]
 - settingsdialog.h        [同上]
 - settingsdialog.ui       [同上]
 - tabwidget.cpp           [WebPageFormにタブを表示する用]
 - tabwidget.h             [同上]
 - timerdialog.cpp         [Timerダイアログ]
 - timerdialog.h           [同上]
 - timerdialog.ui          [同上]
 - tweetdialog.cpp         [ツイート用ダイアログ]
 - tweetdialog.h           [同上]
 - tweetdialog.ui          [同上]
 - twitterinfo_sample.h    [ツイッター用のヘッダサンプル。ビルド手順に従い、コピーと設定が必要]
 - webpageform.cpp         [Web表示ウィジェット - 配布版はまだ入っていない、ブラウザ分割ウィンド]
 - webpageform.h       [同上]
 - webpageform.ui      [同上]
 - webview.cpp             [QWebView拡張。WebPageFormとメインウィンドウで利用]
 - webview.h               [同上]

ほかのOSでも調べてからIssue登録予定だけど、Mac OS X(10.9)で、ビルドした環境での起動(英語表示)だと、以下の表示がウィンドウ内におさまってないらしい。

Timer Dialog

思い出のダイアログも以前は収まってなかったけど、update/merge後に試したら修正済みだったようです。最初にビルドした時は、キャンセルボタンも見えてなかったので、強制終了させてしまったのですけどね。同じ状態が再現した人はウィンドウを拡大すればキャンセルボタンがあるので、それでキャンセルできます。

ところで、Timerダイアログの参考時間は使いやすいのだけど、英語版でもそこだけは日本語なんですよねぇ。さすがにすべて英語訳するのは大変そうですけど。

大雑把にですがコードは読んだので、何か機能思いついたらごそごそ入れていってみたいなと思います。

P.S.
どうやら、翻訳ファイルには艦名が入っている模様。Timer用の翻訳データに見えるけど・・・・。もう少し調査が必要そう。