web-dev-qa-db-ja.com

はQtフレームワークを通じてC ++を学習していますか?

私が持っている問題は、私が読んだほとんどのC++の本は、構文と言語の基本にほとんど永遠に費やしているということです。 forおよびループwhile、配列、リスト、ポインターなど。

しかし、学習に使用できるほど単純で、言語の哲学と力を理解するのに十分実用的であるものは決して構築していないようです。

それから私は偶然に遭遇しました [〜#〜] qt [〜#〜] これは素晴らしいライブラリです!

しかし、彼らが持っているデモを通して作業していると、私は今、逆ジレンマにあるようです。金持ちの息子が父親の助成を受けたスポーツカーを回っているような気分だ。素晴らしいソフトウェアを構築できたようですが、内部で何が起こっているのかわかりません。

私のジレンマの例として、単純なWebブラウザーを構築するタスクを取り上げます。純粋なC++では、どこから始めればよいかさえわかりませんが、Qtライブラリを使用すると、コードの数行で実行できます。

私はこれについて文句を言っていません。言語の基本構造とQtフレームワークが提供する高レベルのインターフェースとの間の知識の空白を埋める方法を単に疑問に思っていますか?

33
user866190

アクセルを踏んで車が速くなるのを知りたいですか、それともアクセルを踏んで車が速くなるのを気にかけているだけですか?

すべてのボックスが機能するときにシステムを設計するための優れた方法である、ブラックボックスプログラミングの利点がわかります。誰かがブラックボックスを作成する必要がありますが、その男/女になりたい場合は、ボックスを使用している男よりも言語について詳しく知る必要があります。

それぞれのスタイルに良い仕事があるので、あなたがプログラムしたいものはあなた次第です。 IMOあなたは自分自身を不幸にしているでしょうが、もしあなたがQTが最終的にあなたに与えている抽象化のいくつかを取り除くための努力をしなかったなら。

11
Ryathal

このように表現したい場合、自分自身に与える最も大きな損害は、標準のC++データ構造、イテレータ、アルゴリズム、および文字列を使用することをまったく学習しないことです。 Qt APIは独自のデータ構造のみを受け入れるため、Qtにはそれらすべての目的のための独自のライブラリがあり、標準のC++エンティティの代わりにそれらを使用せざるを得ません。

あるアルゴリズムライブラリを使用した後、他のアルゴリズムライブラリを使用することを学ぶのは簡単なことだと主張する人もいます。面接担当者がC++を習得することを期待している面接に行く前に、事前にその些細なことに対処するようにしてください。

18
otto

Qtには、ソースファイルを処理する必要がある独自のメタコンパイラーがあることを考えると、Qtコードを「単なるC++」であると見なすことは困難です。

しかし、より重要なのは、Qtが使用および推奨するC++のstyleは、他の人にとって、1995年頃に最後に見られたものです。

本当に、それはC++を可能な限りJavaのようにする試みです。 todayを使用してC++を実際に使用する価値があるすべての驚くべきことを見逃しているか、思いとどまらせます。代わりに、何よりもまず劣ったJavaのように感じるサブセットにロックされます。

したがって、C++を学ぶことが目標である場合は、Qtを避けてください。確立されたライブラリを開始点として使用したい場合は、代わりにBoostをご覧ください。 Boostは、優れていると見なされるプラクティスを具体化しますtoday

しかし正直なところ、もしあなたがC++言語を学びたいなら、良い教科書を選び、the languageに集中してください。

どのようにしてWebブラウザーを作成しても、せいぜいWebブラウザーについての知識が得られるだけです。それはあなたが使っている言語についてあなたにあまり教えません。

言語としてのC++には、WebBrowserクラスが組み込まれていません。C++標準を読むと、ブラウザについてnothingと表示されます。 GUIアプリケーションについても触れられていません。

それは、それらがライブラリーによって提供される上に構築されているためです()など Qt。 C++は、他のプログラミング言語と同様に、ロジックに関するものであり、ロジックの表現方法に関するものです。そして、はい、それは配列とポインタとループとそれらすべてのものを扱うことを意味します。

これらの組み込みツールだけを使用してWebブラウザーを作成できますか十分な時間がある場合?関連するプログラムロジックを表現する方法を知っていますか?そうでない場合は、ループとポインタにより多くの時間を費やす必要があり、new QWebKit()の呼び出しを減らして、既製のライブラリを便乗させるだけです。

「言語の哲学と力」は配列とリストとループにあり、Webブラウザーにはありません。

12
jalf

はQtフレームワークを通じてC++を学習していますか?

多分。

イベントハンドラーに配置するコードを確認する必要があります。

本当に、あなたがどれだけ「知っている」かに夢中になることはありません。私たちはすべてウィンドウフレームワークを使用しており、まだ学習中です。コーディング/読み取りを続けるだけで、C++の学習を続けることができます。ニューラルネットワークやクイックソートをC++で実装できるとは限らない場合でも、新しいウィンドウフレームワークを習得することは、スキルに非常に役立ちます。

9
brian

心配しないでください。最初は、ほとんどのコードはseフレームワークですが、しばらくするとextendにする必要があります。次に、ますますC++を使用する必要があります。

また、Qtのソース全体を使用できることを忘れないでください。IDEを使用すると、必要な関数/メソッド/クラスの定義に簡単に移動できます。深く行くほど、C++が多くなります。なるほど。

Qt C++と標準C++の違いについて言及している人もいます。これらは2つのキャンプに分類されます。

  • 異なるライブラリ:Qtには、配列、リスト、セット、ハッシュマップなどのすべての通常のコンテナーが含まれています。これらは非常によく適合し、優れた実装ですが、STDの種類ではありません。それでも、最近のバージョン(4.1以降では、私は思う)では、古いバージョン(およびJavaのようなAPI)に加えて、「STDのような」APIがあります。結局、設計の選択(配列を使用する場合、ハッシュマップを使用する場合)は同じであるため、Qt以外のプロジェクトをSTDに変更することはそれほど難しくありません。

  • moc構文の追加:主に信号処理用ですが、いくつかの優れたループ構造もあります。多くの人がこのツールはもはやC++ではないことを意味すると感じています。しかし私見、彼らはちょうど少しスマートなマクロのように感じます。緩やかに結合された優れた信号処理は、優れたフレームワークのhugeの利点であり、静的型付き言語で実行するのは非常に困難です。最近のC++では、大量のテンプレートを使用して実行できます。しかし、Qtが最初にmocを入手したとき、それは標準からほど遠いものでした。最後に、後でQt以外のプロジェクトを実行する場合は、まずフレームワークを使用するかどうか、およびフレームワークにシグナルがあるかどうかを確認します。はいの場合、Qtで慣れていることのほとんどが適用されるため、Qtを最初に学習することによる「害」はありません。

5
Javier

Qtは、優れたGUIライブラリを含む、完全なクロスプラットフォームツールセットと開発環境を提供するため、商用世界で広く使用されています。

また、優れた「言語学者」ツールを含む国際化を完全にサポートします。

アカデミックなキャリアを計画しているなら、私はQtを気にしません。一方、C++が好きで、市場性のあるスキルを学びたい場合は、Qtを学ぶ価値があります。

そしてはい、QtはC++です。気分が良くなれば、標準ライブラリとブーストライブラリを組み合わせて心のコンテンツにすることができます。

4
Jim In Texas

Qtを通してC++を学ぶのは悪い考えです。最初に、フレームワークに依存しない言語の概念を学ぶ必要があります。それが、c ++の本があなたに教えるものであり、それらは正しいです。基本的に、「for、loop while、配列、リスト、ポインタ」はプログラミング言語のすべてです。追加機能はフレームワークによって提供されます。プログラミング言語を習得すると、その言語を使用して構築されたQtやMFCなどのフレームワークを学習できるため、アプリケーションを迅速に開発できます。 Qtに関しては、c ++を学ぶと、それは、Javaまたは.Net開発者と同じくらい生産性が高くなる優れたフレームワークです。まもなく、iOSおよびAndroid Qtを使用するアプリ。

3
Jaak

まあ、C++を学ぶための最良の方法は、独自の構文のみ(標準C++)を使用することだと思うので、Qt(または他のフレームワーク、ライブラリなど)ではなくLANGUAGEのものを使用できます。

どうして?なぜなら、初心者として、他のC++以外のコード(この場合はQt)と混合されたC++コードを見ると、C++の何が何で何がそうでないかを見ることができず、むしろより複雑なプロセスになるからです。

2
CVist