« 2013年7月 | トップページ | 2013年11月 »

2013年8月27日 (火)

Qt on Androidにプロジェクトを移行する際にハマったこと その2

無事、実機でデバッグできるようになったのはいいんだけど、不具合もいっぱい。まあ、自分のいい加減な作り方が悪い部分も(いっぱい)あるんだけど・・・。

○配色がおかしい&メニューの中身が真っ黒になってしまう、などなど

スタイルをちゃんと指定していないのが原因。アプリケーションを作成した後に、設定してやればOK。

    QApplication a(argc, argv);
    QPlastiqueStyle* as = new QPlastiqueStyle();
    a.setPalette( as->standardPalette() );
    a.setStyle(new QPlastiqueStyle());

Android用のスタイルもあるんだけど、すべてのウィジェットに対応できていないようなので通常のスタイルを設定してます。

○ロケールがちゃんと取得できない、みたい

というわけで、ファイルを保存すると文字化けしてしまったりするので、これも初めに指定。

    QApplication a(argc, argv);
    QTextCodec::setCodecForLocale( QTextCodec::codecForName( "UTF8" ));
    QTextCodec::setCodecForCStrings( QTextCodec::codecForName( "UTF-8" ));

○QDialogを継承したクラスで、フォントサイズがおかしくなる。

と言い切っていいのかどうかは分かりませんが、アプリ全体のフォントサイズは、

    int normalFontSize = 8;

 QApplication a(argc, argv);
    QFont f = a.font();
    f.setPointSize( normalFontSize );
    a.setFont( f );

てな感じで指定できます。でも、ダイアログを開くと、一部で巨大化した文字表示されてしまいます。というわけで、ダイアログのコンストラクタで、おかしくなるフォントのサイズを指定してやることで修正。

    QFont fn = ui->label->font();
    fn.setPointSize( normalFontSize );
    ui->label->setFont( fn );

○QComboboxのプルダウンリストの文字サイズが最小化されてしまう。

    ui->comboBox->setFont( fn );

てな感じでやってみたら、エディタ欄に表示されている文字は大きくなるんだけど、プルダウンリストの文字には反映されません。これについては現在解決法が見つかりません。頭の痛いところです。

でも、まあ、Linux上で作成したものが、当たり前のようにAndroid端末で動いてしまうというのは、何というか、感動するものがありますね。よい時代になったものです。

| | コメント (0) | トラックバック (0)

2013年8月23日 (金)

Qt on Androidにプロジェクトを移行する際にハマったこと

さて、ある程度、形が出来上がってきたので、Linux環境(以下、環境L)で作成しているプログラムをAndroidに移植してみることにしました。と言っても、ソースはそのまま使えるはずなんですが・・・。

とか言いながら、やっぱりはまるところがあったので、メモ。開発環境は、仮想環境に構築したUbuntuにLxdeを入れた上で、Necessitas(以下、環境N)を導入してあります。

まず、ソースの移行方法は、もっとスマートな方法がありそうな気はするけれど、よくわからないので、環境Lの方で作ってるやつをフォルダごとUSBにコピーして、環境Nにコピー。その後、".pro"".pro.user"ファイルを削除して、端末を起動して、ソースフォルダからqmakeを起動してプロジェクトを新規に作成。うちの場合だと、こんな感じ。

> ../necessitas/Android/Qt/482/armeabi/bin/qmake -project

その後、QtCreatorで読み込むと、プロジェクトの初期設定画面になるので、右下のボタンを押して、プロジェクトを作成。

その後は問題なく動くんだけれど、ビルドすると、

> cannot find ELF information

というエラーが出て、AVDでも実機でも実行できない。と言うか、AVDでは、MinistroIIのダウンロードができなくて、だめなんだけど。でも、実機でも動かない。

あれこれやってみてもどうにもならず、頭を抱えつつ、メッセージをたよりにググってみると、

> 「画面左の「プロジェクト」をクリックして、「Deployment」の
> 「Package Configurations」の「Application」のところを*見れば*分かる。」

というようなメッセージが。という訳で見てみると、「Run」の項目に入るはずの実行ファイルの名前が空欄になっています。が、編集しようとしても、編集できません。

しばし悩んでから、先ほど新規作成したプロジェクトファイルを見ると・・・、分かりました。

> TEMPLATE = app
> TARGET =  ・・・ こいつが犯人。
> DEPENDPATH += .

という訳で、

> TEMPLATE = app
> #TARGET =
> DEPENDPATH += .

と修正してやることで、無事、実機での実行ができるようになりました。めでたしめでたし。

| | コメント (0) | トラックバック (0)

2013年8月 6日 (火)

QStringのファイル入出力について

もっといい方法があるのかもしれないけれど、とりあえずこのパターンでうまくいっているので、メモ。

<<出力>>

ofstream out;
QString txt = "テストです";

out << txt.toLocal8Bit().data() << std::endl;

<<入力>>

char buff[ MAX ];
ifstream in;
int pos = 0;
char c;

in.get( c );

while (( c != '\n' )&&( !in.eof() )){
        if ( pos <= MAX ) buff[ pos++ ] = c;
        in.get( c );
}
buff[ pos ] = 0;

QString ts="";

if ( buff[ 0 ] != 0 ){
        ts = QString::fromLocal8Bit( buff );
}

てな感じ。

| | コメント (0) | トラックバック (0)

2013年8月 5日 (月)

MACの仮想環境での、はみ出したWindowの移動

optionを押しながらドラッグすればOK。



| | コメント (0) | トラックバック (0)

« 2013年7月 | トップページ | 2013年11月 »