26

私の主な経験は C && C++ です。QT、GTK、wxWidgets などのツール キットは使用したくありません。ネイティブ プログラミングを学びたいのですが、この種の目的は達成できません。それを念頭に置いて、Javaも避けたいと思います。

gnome、xfce、KDE ​​などはすべて Linux のデスクトップ環境であり、通常インストールされるベースは X (Xorg) です。Linux 用にコーディングする場合、X 用にコーディングしますか?それともデスクトップ環境用にコーディングしますか? Linux 用の標準の Linux ヘッダー (win32 の windows.h など) はありますか? それとも、デスクトップ環境ごとに異なるコーディング方法ですか?

どんな助けでも大歓迎です。

4

11 に答える 11

65

Xはプログラミングするのに恐ろしいレイヤーであり、Java、QT、または優れたUI抽象化レイヤーのいずれかを回避する意図があるにもかかわらず、そのレベルにコーディングすることで自分自身を不幸にすることになります。私はそれを実行しました(私たちが使用していたプラットフォームでMotifが初期段階にあったとき)、もっと簡単な方法があれば、もう一度実行することはありません。

「ネイティブプログラミング」というフレーズを使用すると、少し混乱します。ネイティブプログラミングを学びたい場合は、呼び出すことを選択したAPIに依存します。同様の推論を使用して、Cでコーディングするのではなく、Cがハードウェアに抽象化を提供するため、代わりにアセンブラー(または直接マシンコード)を選択する必要があります。

Xプログラミングを学びたいのなら、それで結構です。最終的にはインターフェイスをより細かく制御できるようになりますが、ソフトウェアの配信に関しては、他のほとんどの人がパフォーマンスを上回っています。私自身、多くのプラットフォームで使用できる高レベルのAPIにコーディングすることを好みます。これにより、配信時間の短縮と市場の可能性の向上の両方が実現します。

あなたは原子から家を建てるのではなく、レンガから家を建てます。私の提案は、ツールを使用することです。それがツールの目的です。

于 2008-12-12T01:49:30.370 に答える
44

QT、GTK、wxWidgets などのツール キットは使用したくありません。ネイティブ プログラミングを学びたいのですが、この種の目的は達成できません。

いいえ、ありません。R1 や R2 のような X11 の初期のバージョンでは、完全な "Hello, world" プログラムを Xlib だけでコーディングしていました。

Cの約700行。

あなたはそこに行きたくない。

于 2008-12-12T02:32:36.930 に答える
14

Xlibに対して直接Cコードを書くことはできると思いますが、GTK +またはQTが提供する、Xだけではないすべての機能を再現することになります。

于 2008-12-12T01:45:35.887 に答える
4

GTK、QT、およびwxは、X上に構築されてより使いやすいAPIを提供するツールキットです。

既存のツールキットを使用しない場合は、非常に低いレベルで物事を書く必要があります。つまり、マウスとキーボードのイベントを直接処理します。ボタンまたはテキストボックスが必要な場合は、低レベルのxlibプリミティブを使用して自分で作成する必要があります。

これを試す前に、好みのデスクトップ環境のツールキットを選択して、それから始める方がよいでしょう。

于 2008-12-12T01:48:49.437 に答える
4

この場合、「ネイティブ」のようなものはありません。WindowsとOSXには公式オプションがありますが、Xにはありません。

于 2008-12-12T01:50:49.200 に答える
3

Linux および他のほとんどの Unix ライクな OS の「ネイティブ」インターフェースは、X11 用の最低レベルの C API である Xlib です。

GTK、Qt などはすべて (私の知る限り) Xlib の観点からコアに実装されています。他の人が言ったように、Xlib はあなたに最大限の制御を与えますが、あなたはそれのために働かなければなりません (そして、製品を提供するという点で、他の人があなたの周りを回っているかもしれません)。

参考までに、私は個人的にかなり機能が豊富で最新の (フロー可能な) クロスプラットフォーム (Win32 + X11) GUI ライブラリを C++ で実装しました。合計数は C++ の約 29 KLOC で、そのうち X11 と Win32 のシミングにはそれぞれ約 2500 行が必要でした。残りは、プラットフォームに依存しないウィジェットの実装用です。そのようなコミットメントを行う準備ができていない限り、より高いレベルのライブラリのいずれかを使用することを強くお勧めします (プリプロセッサのアプローチには耐えられませんが、Qt を選択することになるでしょう)。

ところで、Xlib の大きな利点は移植性です。画面を備えた Unix ボックスには移植性があり、Windows や OS X でも動作するようにすることができます。

于 2008-12-12T04:26:51.380 に答える
3

ここで、他の回答の全会一致に反論する必要があると感じています。X11 は確かに低レベルです。しかし、何が起こっているのかを「真に」理解するには、X11 がどのように機能するかをある程度理解しておく必要があります。すべてのツールキットは X 上で動作するため、好むと好まざるとにかかわらず、X を使用しています。私が検索するのが面倒なオンラインのどこかに素敵なチュートリアルがあります。簡単な Hello World を作成する手順を説明します。そのためには、ウィンドウを作成し、イベントを要求し、ウィンドウをマップし、イベントをループで処理する方法を学ぶ必要があります。Amazonで中古本を注文することさえできます。O'Reilly の第 1 巻と第 2 巻 (現時点では最も安価な版を入手できますが、X11R4 より前の版はありません) は、参照用として、また各部分がどのように連携するかの完全なストーリーを得るために不可欠です。ただし、学習に関しては、

この旅のある時点で、他の誰もが言うように、もう十分だと気付くでしょう。ビジュアルを選択するためだけに 2 ページのコードがあり、カスタム ビットマップを描画する前にカラーマップを設定する必要があります。そして、2 日間の書き直しとデバッグを行って、すべて機能することを確認しました。するのを忘れただけXFlush()です!

気に入ったツールキットが見つかると、そのツールキットの価値がさらに高まるため、この苦労は重要です。

于 2011-08-07T06:57:18.030 に答える
1

lesstif/motif もお勧めします。また、X の上に構築されており、私の意見では、学習曲線は GTK や Qt ほど急ではありません。ただし、それを使用して構築する UI は、GTK や Qt で構築できるほど洗練されたものにはなりません。詳細については、こちらをご覧ください

他の人が言ったように、あなたはおそらく X したくないでしょう、それは苦痛です。

于 2008-12-12T02:41:48.363 に答える
0

そうそう、そのような「ネイティブ」なものがあります:

FBUI、svgalib、directfb、exa(kdrive)、SDL、Allegro .. + Wayland、ただし主流ではありません。

http://home.comcast.net/~fbui/

http://www.svgalib.org/

http://directfb.org/

http://xorg.freedesktop.org/wiki/ExaStatus

+ http://wayland.freedesktop.org/

于 2011-10-28T14:07:57.350 に答える
0

たとえば、Qt、wxWidgets、GTK の中から 1 つを選択して、API ではなく内部を学んでみませんか? そのためだけに言っているのではなく、あなたが一番魅力を感じている部分に貢献することを目指しています。このようにして、あなたは自分の目標を達成し、自分のためにも他の人のためにも役立つ何かをすることができます. これは、不適切なツールを使用してアプリケーションを構築するというかなり人為的なタスクを自分自身に割り当てるよりも、やりがいがあると思います。

于 2011-08-07T08:07:12.350 に答える