web-dev-qa-db-ja.com

もしあれば、GTK +、wxWidgets、Qt、FLTKのWindowsネイティブルックを実現しますか?

Windows用にネイティブに書かれたものと視覚的に区別できないアプリケーションを作成する必要がありますXP/Vista/7、最新のVisualスタジオ。しかし、私はMinGWとVim(C++)を使用して開発しています。

特に、次のコントロールを上記の3つのバージョンのWindowsでネイティブにしたい:フォームクロム、ボタン、チェックボックス、メニュー、コンボボックス、プログレスバー、スクロールバー、リッチテキストボックス。これで十分です。

GdiPlusやその他のriched32.dll必要に応じて、Windows APIを使用してコントロールをインスタンス化すると、OSはそのバージョンのGdiPlusまたは他のライブラリに置き換えられるため、XPスタイルコントロールはXP、VistaではVista、等.

しかし、デフォルトのフォントを取得するのにコードの半分のページが必要であり、私がやりたいことは何でも似ているので、プレーンなWindows APIを使用したくありません。そこで、ツールキットを使用したいと思います。

wxWidgets、Qt、GTK +、FLTKは最も広く使用されているようです。しかし、それらはすべてクロスプラットフォームです。クロスプラットフォームアプリケーションを使用しましたが、それらの多くには外部GUIコントロールがあります(ウィジェットと呼びます)。だから私の質問は次のとおりです:上記のMSWinの3つのバージョンで正しく表示される上記のネイティブな外観のUIコントロールを生成するためにこれらのツールキットのどれを作成できますか?

私はそれらのそれぞれに「ウィンドウ」をGoogle画像に入力しましたが、FLTKがおそらくできないことを除いて、わかりにくいです。あなたの多くはあなたの頭の上の答えを知っている必要があります...

29
Evgeni Sergeev

FLTKについては知らないので、説明しません。

  • wxWidgetsは、プラットフォームのネイティブツールキットを使用します(LinuxではGTK、WindowsではWin32 GUI API、MacOS XではCocoa)。
  • GTKは、テーマAPIを使用して、プラットフォームのルックアンドフィールを偽造します(GTK2のカスタムテーマエンジン、GTK3のCSSベースのエンジン)。
  • Qtは styles を使用して、プラットフォームのルックアンドフィールを偽造します。

wxWidgets APIは、私自身の経験からすると非常にいです。なぜなら、1つまたは他のプラットフォームで使用できるメソッドが多すぎて、回避策がない限り移植性のないものになるからです。 GTK +やQtとは異なり、バックエンドとして使用するツールキットの上に独自のバグ層も追加します。ただし、ネイティブツールキットを使用しているため、プラットフォームのネイティブな外観を持つように努めています。

GTK + 3にはWindowsでまだいくつかのラフなエッジがありますが、GTK + 3.6以降は公式にサポートしています。 GTK +プロジェクトは、Windowsバイナリの配布を MSYS2 プロジェクトに委任します。すでにMinGWを使用しているので、それはほとんど同じ種類の環境です。 GTKmmとの良好なC++バインディングがあります。ただし、お使いのWindowsのバージョンに合わせてテーマを正しく設定するための作業が必要になる場合があります。

Qtは、Windowsを主なターゲットとするクロスプラットフォームC++開発に適した選択肢です。プラットフォームのネイティブルックアンドフィールを模倣しようとしますが、 独自のテーマ制限もあります

要約すると、2つのアプローチしかありません。

  • 独自のウィジェットを提供し、テーマ(GTK +およびQt)を提供することでネイティブプラットフォームのように見えることを試みるツールキット
  • ネイティブウィジェットを使用するが、APIを抽象化レイヤー(wxWidgets)の背後に隠すツールキット

どちらにも長所と短所があります。

25
liberforce

実装の詳細はさておき、wxWidgetsの哲学は、可能な限りネイティブに見えることです。 wxWidgetsの開発者である私たちは、ネイティブアプリケーションと見分けがつかないという目標を常に達成しているわけではありませんが、常にそれを目指しています。私の知る限り、これはQtにとってそれほど重要な目標ではなく、間違いなくGTK +にとっても重要な目標ではないため、特にOS Xでユーザーに最高のエクスペリエンスを提供することに真剣に取り組むなら、wxWidgetsが最良の選択です。

より正確に質問に答えるために、上記リストのすべては、wxWidgets for Windowsのネイティブコントロールを使用して実装されます(ただし、リッチテキストコントロールは他のプラットフォームではネイティブに使用できません)。

26
VZ.

IUP-ポータブルユーザーインターフェイスライブラリは、ネイティブウィジェット、C API、およびLuaバインディングを使用します。

4
Alex V.

私はコードを変更せずにネイティブのクロスプラットフォームにJavaを使用し、パフォーマンスを少し上げてスタンドアロンの実行可能ファイルにしたい場合はc/c ++ wxwidgetsをクロスプラットフォーム専用に使用し、 gnu linuxネイティブプラットフォームおよびターミナルコンソール用のwindowsおよびx11、ソフトウェアを最新の状態にしたい場合はスクリプトコンソールおよびプラットフォーム用にpythonを使用し、少しシンプルな純粋なコンソールにはAssemblyを使用しました。それらをすべて、Windows上の共有ライブラリ.dllおよびgnu linux上の.soと組み合わせ、小さなハードウェア要件でプログラミングの研究を比較パフォーマンスするのが好きでした。

1
Iton Sandal