2011-06-29 3 views
4

アイコンを含む標準のWindowsリソースファイルを埋め込むことで、簡単なアプリケーションアイコンを作成しました。しかし、私はまた、メインのアプリケーションウィンドウでこのアイコンを使用したいと思います。これを行う簡単な方法はありますか?これまでは、すでに存在するアイコンを再利用するのではなく、ウィンドウアイコンを含むアイコンを別個に読み込む唯一の方法と思われます。これは恐ろしい解決策のようです。実際のアイコンは実行可能ファイルに埋め込まれていますが、2度配布する必要はありません。Qtアプリケーションとウィンドウウィンドウ下のアイコン

誰でもこの方法を知っていますか?実際

+3

QTリソースメカニズムを使用していますか? (* qrc)これは簡単に行うことができるためです。 http://doc.qt.nokia.com/latest/resources.html – RvdK

+1

@PoweRoy:乾杯しましたが、質問を投稿してから15分ほど前に自分の答えが見つかりました。 – Goz

答えて

7

...私はゴズからの投稿があなたの質問のために良い試合だと思う

HICON  hIcon = (HICON)LoadImage(GetModuleHandle(nullptr), MAKEINTRESOURCE(IDI_ICON1), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_LOADTRANSPARENT); 

setWindowIcon(QIcon(QtWin::fromWinHICON(hIcon))); 

::DestroyIcon(hIcon); 
+0

これらの識別子はどこに定義されていますか?私は私の運を試みたが、すべては宣言されていない。ありがとうございました。 – Nuno

+0

ウィンドウ内で... – Goz

+0

最新のQtでは、呼び出しはQtWin :: fromHICON(HICONアイコン)になっています。 –

5

...その非常に非常に単純に判明しました。 しかし、あなたは(アプリケーションアイコンを設定すると、プラットフォームに依存しているので、実際にpreferrableです)ネイティブWindows APIを使用しないようにしたい場合、私はこの一見あまりエレガントなアプローチを選ぶでしょう:

1) in your .pro file: 

    win32:RC_FILE=your_rcfile_with_icon.rc 
    RESOURCES += qt_Resource_file.qrc 

2) Add the same icon as in your .rc file to the qt .qrc file (i.e. embedd it twice) 

3) in your main file: 

    setWindowIcon(QIcon(":/the_icon.ico")); 

これは、ネイティブAPI呼び出しを回避し、あなたのコードは移植可能なままです。 アプリケーションのアイコンは、すべてのプラットフォームで不都合な点があります。したがって、移植可能なコードが必要な場合は、ネイティブコールを避ける必要があります。

+1

埋め込みは、IMOというひどい解決策です。私はむしろ#defineを使って1つの場所でプラットフォーム特有のものを使う方がよいでしょう。 – Goz

+1

@Goz〜10KBの移植性は素晴らしい解決策です。 – Inverse

+0

QT dllが数メガバイトだと考えると、数KBで誰も救われません。 –

関連する問題