特集

UNIX USER1月号「デスクトップで動かす・学ぶQt/Embedded」より転載:

Qt/Embeddedのインストール――第1回 フレームバッファでQtアプリ(その3) (5/5)

2004年12月18日 10時00分 更新

前のページ | 1 2 3 4 5 |      

サンプルプログラム

 最後に、連載を通して用いるサンプルプログラムについて説明しておきましょう。作るのは画像ファイルのビューワです。

ファイル構成

 ファイルビューワの最初のバージョンは、表14のようなファイル構成となります。今回作成するプログラムは、次のWebページからダウンロードできます。ソースコードも長くないので、ぜひ動かしたり改造したりしてみてください。

http://www.unixuser.jp/info/#200501

表14 最初のバージョンのファイル構成
ファイル 説明
main.cpp テスト用のメイン
picturewidget.h   画像を表示するウィジェットのヘッダー部
picturewidget.cpp 同実装部
picsview.pro qmakeの.proファイル
images/designer_ デフォルト画像。.proファイルのIMAGESに指定して、プログラムバイナリに取り込んでいる

プログラムのビルド手順と動作確認

 プログラムのビルドは次の手順でできます。

$ cd picsview
$ qmake
$ make

 コマンドラインの第1パラメータに何も指定しないとデフォルトの画像が表示され、画像ファイルを指定するとそのファイルが表示されます。このプログラムの実行例は図5のようになります。

図5

図5 画像ビューワプログラム(第1版)の実行例(クリックで拡大します)


サンプルプログラムの説明

 サンプルプログラム(リスト7)の要点を説明します。

 まず15行目です。.proのIMAGESで指定した画像が、ソースコードとしてqmake_image_collection.cppに取り込まれます。取り込まれた画像は、ファイル名をキーにしてQPixmap::fromMimeSource()を呼ぶことで取得できます。このときの画像の形式はpixmapです。

 次は43行目です。PictureWidget::paintEventは再描画が必要なときに呼ばれる仮想メンバー関数です。変数event中には、再描画が必要な矩形集合の情報が入っています。

 最後は44〜47行です。PictureWidget::paintEventでは、新たに画面上に現れて、再描画が必要になった矩形領域のみを、オフラインに保持した画像から再表示しています。こうすると、すでに表示している領域は再描画されないので、若干ながら表示効率が良くなります。

リスト7 画像ビューワプログラム(第1版)のコード(picturewidget.cpp)
 1    #include <qpixmap.h>
 2    #include "picturewidget.h"
 3
 4    class PictureWidgetPrivate {
 5    public:
 6        QString fileName;
 7        QPixmap pixmap;
 8    };
 9
10    PictureWidget::PictureWidget( QWidget* parent, const char* name, WFlags f )
11        : QWidget( parent, name, f )
12    {
13        setBackgroundMode( NoBackground );
14        d = new PictureWidgetPrivate;
15        d->pixmap = QPixmap::fromMimeSource( "designer_qtlogo.png" );
16        setFixedSize( d->pixmap.size() );
17    }
18
19    PictureWidget::~PictureWidget()
20    {
21        delete d;
22    }
23
24    bool PictureWidget::loadImage( const QString& fileName )
25    {
26        if ( !d->pixmap.load( fileName ) ) {
27            return false;
28        }
29
30        d->fileName = fileName;
31        setFixedSize( d->pixmap.size() );
32        update();
33        updateGeometry();
34
35        return true;
36    }
37
38    const QString& PictureWidget::fileName() const
39    {
40        return d->fileName;
41    }
42
43    void PictureWidget::paintEvent( QPaintEvent* event )
44    {
45        QMemArray<QRect> rects = event->region().rects();
46        for ( uint i = 0; i < rects.size(); ++i ) {
47            bitBlt( this, rects[i].topLeft(), &d->pixmap, rects[i] );
48        }
49    }
50
51    QSize PictureWidget::sizeHint() const
52    {
53        return QSize( d->pixmap.width(), d->pixmap.height() );
54    }

最後に

 第1回は、Qt/Embeddedを用いて、デスクトップ上でフレームバッファを使用してプログラムが動かせるまでを中心に説明しました。次回は、カスタマイズとチューニングを中心に説明します。サンプルプログラムもタイトルバーが付くなどグレードアップします。また、TIFF形式プラグインの機能追加や組み込みらしくタイトルバーなしの全画面表示や、ソフトウェアマウスカーソルの非表示などを実装します。

UNIX USER 1月号表紙 最新号:UNIX USER 1月号の内容

第1特集
Firefoxの飼い方

第2特集
どれを選ぶ? ウイルス対策製品

[特別企画]
・ついに登場! Fedora Core 3
・最新版FreeBSD 5.3-RELEASEの活用術


前のページ | 1 2 3 4 5 |      

[杉田研治,UNIX USER]

Copyright(c)2009 SOFTBANK Creative Inc. All rights reserved.



Feed Back
この記事についてのご感想【必須】


コメント


PR

キャリアアップ



エンタープライズ・ピックアップ

新春インタビュー2009:2009年 逆風に立ち向かう企業のIT経営
景気後退が必至といわれる2009年。「ピンチはチャンス」と発想を転換する企業もある。逆風に立ち向かうIT経営の実践が不可欠となる。ビジネスをITで変革する企業のトップに取り組みを聞く。

news028.jpg ロングインタビュー:トヨタの「自前主義」に微妙な変化――情シスを統括する大西常務
情報システムを開発し、所有する「自前主義」を貫いてきた同社だが、深刻化する不況の中で、それも微妙に変化している。トヨタで情報システムを統括する大西弘致常務役員に話を聞いた。

news073.gif JUAS調べ:企業の「Vista飛ばし」が鮮明に
クライアントPCのOSにWindows Vistaを導入せず、次期OS「Windows 7」の出荷を待つ企業が増えているとJUASが指摘した。現在は一世代前のWindows XPの満足度が総じて高く、Vistaの採用は進みそうにもない。

news050.jpg オルタナブログ通信:これでOracleは全部入り? OracleのSun買収、ブロガーの視点
ビジネス・ブログメディア「ITmedia オルタナティブ・ブログ」では、日々200組を越えるブロガーが、ITにまつわる時事ネタなどを発信している。今週は、「Sun買収」「Twitter」「コスト削減術」をテーマに紹介する。

news010.jpg タスクチームのススメ(1):売り上げ目標だけで走るチームの落とし穴
組織で起こる問題の原因は単一の部門ではなく、複数部門にまたがっていることが多い。さまざまな要素が絡み合った組織の問題を解決するために作られるのが「タスクチーム」だ。本稿では成功するためのタスクチームの作り方を6回にわたり紹介する。

news007.jpg わが社のコスト削減:外資ソフトが攻勢、「国策」定額給付金の支給管理にも
山梨県甲府市は3月、定額給付金支給管理システムにセールスフォース・ドットコムのサービスを採用した。SAPや新興BIの新たな動きが出てくるなど、ここにきて外資系ソフトウェアベンダーの攻勢が目立つ。

news005.jpg 逆境をはね返すサプライチェーン改革:鮮度が絶対条件、品質とスピードに徹した明治乳業の物流改革
牛乳やヨーグルトなどの市乳製品は鮮度の保持が絶対条件であるため、注文から納入までのリードタイムをどれだけ短くできるかがメーカーの物流における重要な課題だ。市乳製品が売り上げの多くを占める明治乳業では、いかなる工夫が見られるのだろうか。取り組みを追った。

news004.jpg 大企業のWebサイト構築法:「クリックされないサイトに価値は宿らない」――JAL、3年半ぶりのHP刷新に託した意図
JALが3年半ぶりにホームページを刷新した。Web経由で航空券やホテルの予約拡大を狙い、顧客ごとに情報を切り出して提供できるガジェットや自動推薦エンジンを取り入れた。Yahoo!などのポータルサイトにならったレイアウトに変更するなど、細部の作り込みにもこだわった。

news040.jpg 「2009 逆風に立ち向かう企業」NEC:企業のIT投資削減はあくまでも緊急避難、攻めに行く
NECの取締役常務執行役員を務める安井潤司氏は「2009年のIT投資は最悪の場合4割減るだろう」と話す。だが重要な投資は続くとみており「攻めにいく」という。安井氏にNECの2009年について話してもらった。

news017.jpg 「2009 逆風に立ち向かう企業」買う市:囲い込みは時代遅れ
インターネットショッピングのモールビジネスは、利用者とテナントの「囲い込み」ではなく「オープン化」が求められている――とlivedoorデパートなどを運営する買う市の平松庚三取締役は話す。同社が取り組む「オープン化」の戦略を聞いた。

news031.jpg 「2009 逆風に立ち向かう企業」富士通:顧客の顧客に注目する
2008年に就任した富士通・野副社長の好きな言葉は、成功するために耐えるという臥薪嘗胆。米国の金融危機に端を発する大きな不況の中で、舵取りが世界から注目されている。

news007.jpg 「2009 逆風に立ち向かう企業」NTTデータ:サービスの押し売りや顧客のご用聞きは低次元の営みだ
景気悪化に伴い多くの企業がIT投資を抑えようとする中、システムを提供するITベンダーは「ただ単に物を売る」というビジネス構造から脱却を図る必要がある。「システムインテグレーターの枠を超える」と標榜するNTTデータの荒田和之取締役常務執行役員に、ユーザー企業の動向を振り返ってもらった。

news012.jpg 「2009 逆風に立ち向かう企業」サイボウズ:売るのはソフトではない、「チームワーク」だ
企業情報の共有/活用は、ビジネスの礎である。グループウェア大手、サイボウズの青野社長は自社のコアコンピタンスを「チームワーク」に据え、エンドユーザーに価値を提供するという。

news005.jpg 「2009 逆風に立ち向かう企業」日産自動車:日産自動車の新たな“挑戦”――「日産GT 2012」
2008年5月に発表した決算で、2009年3月期の連結純利益が2期ぶりの減益に転じると発表した日産自動車。そんな同社を新たな成長軌道に乗せるために策定された5カ年計画が「日産GT 2012」だ。

news003.jpg 「2009 逆風に立ち向かう企業」カカクコム:消費者の買い控え傾向は追い風だ
価格比較サイトを運営するカカクコムは、景気後退により買い控えが鮮明になりつつある消費者の「買い物を失敗したくない」という心理をすくい上げ、右肩上がりの成長を続けている。安田幹広取締役COOは「商品に対する消費者の目は鋭くなる傾向にあるが、これは追い風だ」と言い切る。

news007.jpg 「2009 逆風に立ち向かう企業」三菱東京UFJ銀行:未曾有の金融・経済危機、今こそITの出番
大規模なシステム統合プロジェクトを完遂したメガバンクの雄、三菱東京UFJ銀行は、百年に一度という金融危機の中、生き残りを賭けて、さらなる経営改革に取り組む。根本常務執行役員情報システム部長は「ITの出番は多い」と話す。

news002.jpg 「2009 逆風に立ち向かう企業」ソニー:情シス部門が主役になる日
ソニーは2008年末、大規模な人員削減を発表した。コスト削減の圧力が強い一方で、情報システムを長期的な成長エンジンとして位置づける。ビジネス部門に積極的に提案をするようなIS部門を目指すと話すのは長谷島眞時CIOだ。