Qt on Androidにプロジェクトを移行する際にハマったこと その3
さて、ずいぶんと間が開いてしまいましたが、さらに追記。あれこれググってみたりした結果、以前の問題がある程度解消しています。
◯ロケールがちゃんと取得できない、みたい。
よく考えてみたら、ロケールを取得できないにしても、ロケールを設定できる方法はあってしかるべきです。というわけで、よく探してみたらありました。
QApplication a(argc, argv);
QLocale::setDefault( QLocale( QLocale::Japanese, QLocale::Japan ));
とやってやれば、カレンダーやら数字やらがきちんと日本風に表示されるようになります。
◯QComboboxのプルダウンリストなどの文字サイズが最小化されてしまう問題。
これについては、やはりフォント関係のバグの様で、以下の様にすればOKとのこと。
androidDpi=QPaintDevice::physicalDpiX();
androidFontsize=androidDpi/10; //割る数についてはお好みで。
QFont myf=QApplication::font();
myf.setPixelSize(androidFontsize);
QApplication::setFont(myf);
上記の様にすると、アプリ全体の基本的なフォントサイズをきちんと設定できます。
◯スクロールバーの幅が細くて、スクロールさせるのが大変。
スタイルシートを設定してやればOK。ただし、コンボボックスの場合、スクロールバーだけ太くなると、見た目が悪いので、横のボタンも同時に太くしてやる必要があります。でも、別々に設定しようとすると、あとに設定したものだけ有効になってしまうので、まとめて設定する必要があります。とりあえず、こんな感じで問題なし。
QApplication a(argc, argv);
a.setStyleSheet(QString::fromUtf8("QScrollBar:vertical {"
" border: 2px solid #999999;"
" background:white;"
" width:50px; "
" margin: 0px 0px 0px 0px;"
"}"
"QScrollBar::handle:vertical {"
" background: qlineargradient(x1:0, y1:0, x2:1, y2:0,"
" stop: 0 rgb(140, 160, 170), stop: 0.5 rgb(140, 160, 170), stop:1 rgb(140, 160, 170));"
" min-height: 0px;"
""
"}"
"QScrollBar::add-line:vertical {"
" background: qlineargradient(x1:0, y1:0, x2:1, y2:0,"
" stop: 0 rgb(160, 160, 160), stop: 0.5 rgb(160, 160, 160), stop:1 rgb(160, 160, 160));"
" height: 0px;"
" subcontrol-position: bottom;"
" subcontrol-origin: margin;"
"}"
"QScrollBar::sub-line:vertical {"
" background: qlineargradient(x1:0, y1:0, x2:1, y2:0,"
" stop: 0 rgb(160, 160, 160), stop: 0.5 rgb(160, 160, 160), stop:1 rgb(160, 160, 160));"
" height: 0px;"
" subcontrol-position: top;"
" subcontrol-origin: margin;"
"}"
"QComboBox {"
"border: 1px solid gray;"
"border-radius: 3px;"
"padding: 1px 18px 1px 3px;"
"min-width: 6em;"
"}"
"QComboBox:editable {"
" background: white;"
"}"
"QComboBox:!editable, QComboBox::drop-down:editable {"
" background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,"
" stop: 0 #E1E1E1, stop: 0.4 #DDDDDD,"
" stop: 0.5 #D8D8D8, stop: 1.0 #D3D3D3);"
"}"
"QComboBox:!editable:on, QComboBox::drop-down:editable:on {"
" background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,"
" stop: 0 #D3D3D3, stop: 0.4 #D8D8D8,"
" stop: 0.5 #DDDDDD, stop: 1.0 #E1E1E1);"
"}"
"QComboBox:on { /* shift the text when the popup opens */"
" padding-top: 3px;"
" padding-left: 4px;"
"}"
"QComboBox::drop-down {"
" subcontrol-origin: padding;"
" subcontrol-position: top right;"
" width: 50px;"
" border-left-width: 1px;"
" border-left-color: darkgray;"
" border-left-style: solid; /* just a single line */"
" border-top-right-radius: 3px; /* same radius as the QComboBox */"
" border-bottom-right-radius: 3px;"
"}"
"QComboBox::down-arrow {"
" image: url(/usr/share/icons/16x16/downarrow.png);"
"}"
"QComboBox::down-arrow:on { /* shift the arrow when popup is open */"
" top: 1px;"
" left: 1px;"
"}"
""));
赤字の部分は最低限、必要に応じて変更しないといけないところです。
サンプルファイルやら、フォーラムの書き込みあたりから探してきたので、出典がどこか、分からなくなってしまっているのは御勘弁くださいませ。
◯Androidとそれ以外で処理を分ける。
まあ、上記のような感じでAndroid用の処理が入ってくると、さすがに処理を分ける必要が出てきます。というわけで、以下のようにしてやればOKです。
#ifdef Q_OS_ANDROID
Android用の処理
#else
それ以外の処理
#endif
これら以外にも、試行錯誤で気がついた部分などありますが、時間がないので、また別の機会に。ただ、実機でプログラムを動作させていると、スリープ後にハングアップしてしまうことがあります。その場合、「Fast Reboot」をインストールしておくと、すぐに復帰させることができるので、オススメです。
閑話休題
前の記事から随分間が開いてしまいました。単純に忙しかった、という事もありますが、それ以外にも、Qt5.1.1や5.2.0betaが出たので、あれこれ試してみたりもしてました。
が、しかし、・・・orz。
あくまでも個人的な意見で、かつ、Qt4で作成していたプロジェクトを移行する場合、という条件付きですが、
Qt5.1.1
あれこれ試してみたが、実機で動かした場合、画面表示などがNecessitasの場合よりも崩れるなど、トラブルが多いのでパス。
5.2.0beta
Ministroが対応していないため、実機で動かすのに支障があるので、パス。というか、ビルド&デプロイも、5.1.1より問題が多い感じで、まだ本格的に実機のアプリ作成には使えない感じ。ちなみに、QtCreatorの3.0が、VirtualBoxのUbuntuで起動しないというトラブルに遭遇しましたが、仮想マシンの3Dアクセラレータのチェックを外してやったら起動するようになりました。仮想環境で開発される方はご注意ください。
というわけで、結局、当面はNecessitasでの開発を続けることに決定。という感じで落ち着いています。早くQt5.2の方にも移行したいなぁ、とか思っているんですが、もうちょっと情報が増えるのを待つ感じですね。
| 固定リンク
この記事へのコメントは終了しました。
コメント