2013年7月29日月曜日

Qt Creator で Qt Quick アプリケーションを作ると QML ファイルが読み込めない

OS X Mountain Lion + Qt 5.1.0 + Qt Creator 2.8.0 という環境で開発しています。

Qt Creator で ファイル > ファイル/プロジェクトの新規作成 > Qt Quick 2 Application (Built-in Types) からプロジェクトを作ると main.qml, main.cpp, qtquick2applicationviewer.cpp が含まれたプロジェクトが生成されます。各ファイルに関する説明は QtQuick での C++ × QML バインディングについてまとめてみた を読むといいです。僕もこれを参考に勉強しています。

しかし、初期状態で作成したプロジェクトを実行しようとしても main.qml ファイルの読込エラーが発生してしまいます。原因を調査したところ、どうやらビルド成果物のパスに日本語が含まれると QML ファイルのコピーに失敗してしまうようです。

プロジェクトを作るときのウィザードで日本語を含むパスを指定する(画像参照)と QML ファイルのコピーに失敗しますので、設定を変えて(「デスクトップ」を「Desktop」にでも変更しましょう)再度プロジェクトを生成すると上手く行きます。エラーに悩まされている人は参考にしてください。

成果物へのパスに日本語が含まれている 
「デスクトップ」を「Desktop」に変えた
プロジェクトを再度作成したら英語になった!

ちなみに、元々コピー対象ではないリソースなどをバンドル(hoge.appのこと)に含めるには How to add resource files to an OS X application bundle という方法があるようです。この方法を使っても main.qml が見つからないエラーを解決できます。ただ、この方法は上手くやらないとプロジェクトファイルが OS X 専用になってしまうと思います。なるべく先述の設定変更で対処するのがいいでしょう。

2013年7月23日火曜日

Qt 5.1 + QML + qmlscene

QML でプログラミングを始めよう を参考に QML の勉強を始めました。
ボタンの表示からテキストエディタの作成、C++との連携など一連の内容が書いてあって参考になりそうな感じです。

Qt 5から QML ファイルのプレビュー方法が変わったらしく、ちょっとはまったのでメモしておきます。

上記サイトでは QMLViewer を用いてプレビューを行なっていますが、どうやら Qt 5 からは qmlscene コマンドを使うようです。BeagleBoard 向け Qt 5

公式の First Steps with QML | QtDoc 5.1 を見たら qmlscene を使うんだよとちゃんと書いてありました。お恥ずかしい (^^;

ということで、以下の様な QML ファイルを作って qmlscene しましょう。

-- win.qml --
import QtQuick 2.0

Rectangle {
  id: simplebutton
  color: "gray"
  width: 150
  height: 75

  Text {
    id: buttonlabel
    anchors.centerIn: parent
    text: "hello!!"
  }
}

$ qmlscene win.qml

2013年7月22日月曜日

Qt 5.1 on Mac OS X Mountain Lion

GUIアプリを作ることになりまして、久しぶりに Qt を使おうかなと思ったのでした。
調べたら Qt 5.1 がリリースされていましたので Mountain Lion への入れ方などメモします。

インストール

既に Homebrew で Qt 4.8.4 を入れていたので干渉を避けるため、ソースからビルドすることにしました。
Qt Project から qt-everywhere-opensource-src-5.1.0.tar.gz をダウンロードしビルドします。
ビルド方法は Installation | QtDoc 5.1 が参考になります。

$ tar xzvf qt-everywhere-opensource-src-5.1.0.tar.gz
$ cd qt-everywhere-opensource-src-5.1.0
$ ./configure
$ make
$ sudo make -j1 install

途中でライセンスの選択を聞かれたので LPGL 版を選択しました。最後に PATH の調整をして終わりです。~/.bashrc に次を書き加えればいいでしょう。

export PATH=/usr/local/Qt-5.1.0/bin:$PATH

最後に希望のバージョンが入っていることを確認します。

$ qmake -v

QMake version 3.0
Using Qt version 5.1.0 in /usr/local/Qt-5.1.0/lib

Hello, World

Qt で画像をフルスクリーン表示する を参考にテストプログラムを作りました。

-- main.cpp --
#include <QApplication>
#include <QPixmap>
#include <QLabel>

int main(int argc, char **argv)
{
    QApplication app(argc, argv);
    QPixmap pixmap("/path/to/picture.jpg");
    QLabel screen;
    screen.setPixmap(pixmap);
    screen.show();

    return app.exec();
}
-- main.cpp --

ソースコードを準備したらプロジェクトファイルを生成します。そのプロジェクトのビルドに必要なライブラリや追加のインクルードパス、使用する Qt のモジュールなどを記述するためのファイルです。

$ qmake -project

Qt 5.1 から、どうやら GUI アプリを作る(QApplication クラスなどを使う)にはプロジェクトファイルの修正が必要なようです。生成されたプロジェクトファイルに次の1行を書き加えます。
この修正をしないとヘッダファイルが見つからないと言われたり、なんとか解決しても Mac: Undefined symbols for architecture x86_64: “QApplication::palette()”, referenced from: という感じのエラーが出てリンクできません。

QT += widgets

そうしたら Makefile を生成してビルドします。

$ qmake
$ make

アプリの起動は .app ファイルを起動しましょう。

$ open hoge.app

指定した画像が表示されたら成功です。