はじめに
Qt 4.
リリース日 | バージョン |
---|---|
2009/ | Qt 4. |
2009/ | Qt 4. |
2009/ | Qt 4. |
リリースされてすでに半年以上が過ぎていますので、
Qt 4.5の改善と新機能の概要
Qt 4.
Qt WebKitインテグレーション
Qt WebKitインテグレーションはQt 4.
- ACID3スコアが100/
100になり、 Web標準をクリアしたWebブラウザがQtで利用できるようになりました。 イメージとフォントのフルページズーミング
イメージとフォントの両方、あるいはどちらか片方のズーミングができます。 CSSベースの図形変換とアニメーション
JavaScriptエンジンの速度改善
NetscapeプラグインAPI
(NPAPI)
UNIX/Linux X11、 Mac OS X、 Windowsで使用できます。残念なことですが、 これら以外のプラットフォームへの対応予定はロードマップにありません。Flash Playerプラグインなどが使え、 YouTubeのFLV動画再生ができます。SWFも、 Linuxでは32ビットと64ビットで共に使えます。しかし、 Mac OS Xでは、 SWFはマウス操作もキー操作もできないため、 SWFは扱えませんでした。同じようにWebKitを使っているSafariでは問題なくSWFを使えます。 Phononインテグレーション
HTML 5のオーディオとビデオの各エレメントによる音声と動画がサポートされています。クライアントサイドデータベースストレージ
QtとのインターフェースのためにQWebDatabaseが追加され、 QWebSettingsにsetOfflineStoragePath()、 offlineStoragePath()、 setOfflineStorageDefaultQuota()、 offlineStorageDefaultQuota()などのメソッドが追加されています。
パフォーマンス改善
X11でのMIT-SHM
(MIT Shared Memory Extension) の利用
昨年の特集記事で触れたように、MIT-SHMを利用することで、 イメージデータがメモり共有され、 X11 のクライアントとサーバ間での一番のボトルネックが解消され、 イメージの回転や拡大縮小表示で、 劇的な描画速度改善がされています。次項のラスターグラフィックスエンジンを指定すると、 MIT-SHMが有効になります。 ラスターグラフィックスシステム
描画エンジンがプラグイン化され、ラスター、 OpenGL、 プラットフォーム固有のものから、 目的に合ったものを選択できるようになりました。コマンドラインオプション-graphicssystemでraster、 opengl、 nativeを指定するか、 QApplication::setGraphicsSystem (const QString& system) で、 グラフィックシステムを切り替えられます。 QTestLibへのベンチマーク機能の追加
実時間、CPUクロックカウント、 Valgrind/ Callgrind、 イベントカウントなどの計測機能があります。 OpenGL ES 2.
0ベースの描画エンジン
OpenGL描画エンジンとしてOpenGL ESも使えるようになりました。
Mac OS X Cocoa サポート
Qt/
configureのデフォルトはCarbonで、
オプション | 結果 |
---|---|
-cocoa | 32ビット Cocoa |
-arch x86_ | 64ビット Cocoa |
-arch "x86 x86_ | 32ビットと64ビット Cocoa |
今後のリリースではCocoaがデフォルトになり、
QMacCocoaViewContainerとQMacNativeWidgetの2つのクラスが追加され、
また、
Cocoaサポートとは関係がありませんが、
Windows CEサポート
Windows CEでPhononとWebKitが利用可能になりました。
QtXmlPatternsでXSLTサポート
XQueryとXPathをサポートしているQtXmlPatternsで、
Qtスクリプトデバッガ
QtのECMAScript
OpenDocumentファイルフォーマットの出力
PostScriptやPDFに加えて、
この機能の説明とサンプルコードは、
ネットワークプロキシーサポートの改善
Qt DesignerとQt Linguistの改良
これについては別項で詳しく説明します。
グラフィック機能の改善
トップレベルウィンドウの透過度設定
(Qt 4. 5: QWidget Class Reference )
ウィンドウ属性Qt::WA_TranslucentBackgroundが追加され、 トップレベルウィンドウに、 ピクセル単位で透過度を設定できるようになりました。X11とWindowsでは、 ウィンドウフラグQt::FramelessWindowHintの設定が必要で、 以下の使用条件があります。 X11…ARGBビジュアルとコンポジットウィンドウマネージャがサポートされたXサーバが必要
Windows…Windows 2000以降
マウスイベントが効くかどうかが透明度で決まり、
スタイルシート
Mac OS Xでもスタイルシートがウィジェットで使えるようになりました。
バグ修正や追加機能の調べ方
以前のQtは、
リファレンスのWhat's New in 4.
5を読む 変更履歴changes-4.
5.0を読む Qt Assistantの全文検索機能でintroducedをキーにして検索し、
さらにテキスト検索機能でintroduced in 4. 5と付記されている記述を調べる。 (1) Qt Assistantのサイドバーの検索でintroducedをキーにして検索 - (2)
検索された項目をひとつずつ開きながら - (3)
編集の検索機能で Qt 4. 5 を検索して、 記述内容を調べる
ソースコードを見て初めてわかる機能 br>
リファレンスにも変更履歴にも書かれていなくても、
ソースコードを見ていて気が付き、 開発元に確認するとサポートされている機能だと返事があったりします。
オブジェクトシステムの変更
QMetaObject
QMetaobjectのextradata の構造が変わり、
QMetaMethod QMetaObject::constructor()
int QMetaObject::constructorCount()
int QMetaObject::indexOfConstructor()
QObject* QMetaObject::newInstance()
コンストラクタを呼び出し可能にするには、
Q_INVOKABLE explicit QObject(QObject *parent=0);
サンプルコードmetaconstructor.
$ ./metaconstructor Foo() 0: Foo(0x50a320) Foo() 0: Foo(0x5109b0) Foo() 0: Foo(0x5109c0) Foo() 0: Foo(0x5107f0) Bar() 0: Bar(0x511fc0) Foo() 1: 10 Foo(0x510800) Foo() 1: 10 Foo(0x510810) Foo() 2: 100 10 Foo(0x512120) Foo() 2: 100 10 Foo(0x512180) $
サンプルコードを説明します。
1: #include <QtCore>
2:
3: class Foo : public QObject
4: {
5: Q_OBJECT
6:
7: public:
8: Q_INVOKABLE explicit Foo(QObject* parent = 0) : QObject(parent) {
9: qDebug() « "Foo() 0:" « this;
10: }
11: Q_INVOKABLE explicit Foo(int arg1, QObject* parent = 0) : QObject(parent) {
12: qDebug() « "Foo() 1:" « arg1 « this;
13: }
14: Q_INVOKABLE Foo(int arg1, int arg2, QObject* parent = 0) : QObject(parent) {
15: qDebug() « "Foo() 2:" « arg1 « arg2 « this;
16: }
17: };
18:
19: class Bar : public QObject
20: {
21: Q_OBJECT
22:
23: public:
24: Q_INVOKABLE explicit Bar(QObject* parent = 0) : QObject(parent) {
25: qDebug() « "Bar() 0:" « this;
26: }
27: Q_INVOKABLE explicit Bar(int arg1, QObject* parent = 0) : QObject(parent) {
28: qDebug() « "Bar() 1:" « arg1 « this;
29: }
30: Q_INVOKABLE Bar(int arg1, int arg2, QObject* parent = 0) : QObject(parent) {
31: qDebug() « "Bar() 2:" « arg1 « arg2 « this;
32: }
33: };
クラス Foo と Bar のコンストラクタに Q_
34:
35: QObject* createObject(const QMetaObject* metaObject)
36: {
37: return metaObject->newInstance();
38: }
どのクラスかは、
39:
40: int main(int argc, char** argv)
41: {
42: QCoreApplication app(argc, argv);
43:
44: QObject* object = Foo::staticMetaObject.newInstance();
スタティックメタオブジェクトを直接アクセスして、
45:
46: QGenericArgument parentArg = Q_ARG(QObject*, 0);
47: object = Foo::staticMetaObject.newInstance(parentArg); // Returns Foo
親オブジェクトを指定するだけのコンストラクタ呼び出しです。
48:
49: const QMetaObject* metaObject = &Foo::staticMetaObject;
50: object = metaObject->newInstance(parentArg);
51: object = createObject(&Foo::staticMetaObject); // Returns Foo!
52: object = createObject(&Bar::staticMetaObject); // Returns Bar!
createObject() に、
53:
54: QGenericArgument intArg1 = Q_ARG(int, 10);
55: object = Foo::staticMetaObject.newInstance(intArg1, parentArg); // Returns Foo
56: object = metaObject->newInstance(intArg1, parentArg); // Returns Foo
57:
58: QGenericArgument intArg2 = Q_ARG(int, 100);
59: object = Foo::staticMetaObject.newInstance(intArg2, intArg1, parentArg); // Returns Foo
60: object = metaObject->newInstance(intArg2, intArg1, parentArg); // Returns Foo
引数を指定したコンストラクタ呼び出しです。
61:
62: return 0;
63: }
64:
65: #include "metaconstructor.moc"
Q_SIGNAL と Q_SLOT
シグナルとスロットの宣言signalsとslotsに加えて、
Qt 4.
おわりに
次回以降では、