Ct를 실제로 배우는 Qt 프레임 워크를 통해 C ++를 배우고 있습니까?


32

내가 가진 문제는 내가 읽은 대부분의 C ++ 책이 구문과 언어의 기본 사항, 예를 들어 for루프 while, 배열, 목록, 포인터 등에 거의 영원히 쓰는 것입니다 .

그러나 그들은 학습에 사용하기에 충분히 단순하지만 언어의 철학과 힘을 이해할 수있을 정도로 실용적인 것을 만들어 내지 않는 것 같습니다.

그런 다음 놀라운 도서관 인 QT 를 우연히 발견했습니다 !

그러나 그들이 가지고있는 데모를 통해 작업하면, 나는 지금 역 딜레마에있는 것처럼 보입니다. 부자 아들이 아버지가 보조금을 지급 한 스포츠카를 타고 다니는 것 같습니다. 환상적인 소프트웨어를 만들 수는 있지만, 어떤 일이 벌어지고 있는지 전혀 알지 못합니다.

내 딜레마의 예로 간단한 웹 브라우저를 구축하는 작업을 수행하십시오. 순수한 C ++에서는 어디서부터 시작 해야할지조차 알지 못하지만 Qt 라이브러리를 사용하면 코드의 몇 줄 내에서 수행 할 수 있습니다.

나는 이것에 대해 불평하지 않습니다. 언어의 기본 구조와 Qt 프레임 워크가 제공하는 고급 인터페이스 사이의 지식 공허를 채우는 방법이 궁금합니다.


Qt의 프로그래밍에 익숙하지 않습니다. 실제로 새로운 구문을 도입하거나 언어를 변경합니까, 아니면 매우 정교한 라이브러리입니까?
FrustratedWithFormsDesigner

@FrustratedWithFormsDesigner 관심이 있다면 QT는 GUI 프레임 워크가 아닙니다 qt.nokia.com
Karlson

Qt는 표준 클래스 및 컨테이너 (예 : QString, QList 등) 및 기타 여러 시설에 대한 대안을 제공합니다. 그들 중 일부는 표준보다 훨씬 직관적입니다. 좋은 프로그래밍 환경이라고 생각하지만 핵심 C ++ 언어를 별도로 배우는 것이 좋습니다.
Giorgio

3
Qt 구현 방법을 배우려면 소스 코드를 다운로드하여 확인하십시오.
user16764

1
@Karlson Qt는 언어에 몇 가지 사항을 추가하므로 moc 일명 메타 객체 컴파일러가 필요합니다. 이것은 약간의 반사를 추가하고 Qt의 신호 / 슬롯 시스템의 기초를 형성합니다.
Tamás Szelei

답변:


11

액셀러레이터를 밟으면 차량의 속도가 어떻게 빨라지거나 액셀러레이터를 밟으면 차량의 속도가 빨라지는지 알고 싶습니까?

블랙 박스 프로그래밍의 이점은 모든 박스가 작동 할 때 시스템을 설계하는 좋은 방법입니다. 누군가 블랙 박스를 만들어야하지만 그 남자 / 여자가되고 싶다면 상자를 사용하는 남자보다 언어에 대해 더 많이 알아야합니다.

각 스타일에 적합한 작업이 있으므로 프로그래밍하려는 작업에 따라 다릅니다. IMO 당신은 QT가 결국 당신에게주는 추상화의 일부를 철회하려는 노력을 기울이지 않았다면 스스로에게 장애를 겪을 것입니다.


2
"IMO는 QT가 궁극적으로 제공하는 추상화의 일부를 철회하려는 노력을 기울이지 않으면 스스로 장애를 겪을 것입니다." 귀하의 권리와 내가 가지고있는 직감 이잖아
user866190

18

당신이 그렇게하고 싶다면 자신에게 가장 큰 피해는 표준 C ++ 데이터 구조, 반복자, 알고리즘 및 문자열을 전혀 사용하지 않는 것입니다. Qt는 모든 목적을 위해 자체 라이브러리를 가지고 있으며 Qt API는 자체 데이터 구조 만 허용하므로 표준 C ++ 엔티티 대신 라이브러리를 사용해야합니다.

하나는 다른 알고리즘을 마스터 한 후 하나의 알고리즘 라이브러리를 사용하는 법을 배우는 것이 사소한 일이라고 주장 할 수 있습니다. 면접관이 C ++을 익히기를 기대하는 인터뷰에 가기 전에 미리 그 사소한 일을 처리해야합니다.


3
합의-Qt는 표준 C ++과 완전히 다른 툴셋을 사용합니다.
DeadMG

우리 회사에서는 표준 컨테이너와 반복자를 사용해야하는지 또는 Qt를 사용해야하는지에 대한 오랜 논쟁이 있었지만 아직 해결책을 찾지 못했습니다. 우리는 두 가지 스타일을 주어진 모듈. 시간이 걸리더라도 Qt에서 표준으로 전환하는 것이 개념적으로 매우 쉽다는 느낌이 듭니다.
Giorgio

9
엔지니어링 모델, 즉 비즈니스 로직 내에서 표준 컨테이너와 알고리즘을 사용합니다. GUI 코드 내에서 Qt 컨테이너를 사용합니다. 이런 식으로 내 엔지니어링 모델은 Qt의 변화로부터 보호되며 그 반대도 마찬가지입니다. Qt에는 표준 컨테이너와 컨테이너를 연결하는 방법이 있습니다.
emsr

2
어쨌든 컨테이너에 대해서는별로 신경 쓰지 않습니다. 그것들은 STL에서 가장 유용한 부분이 아닙니다. 알고리즘이 훨씬 더 중요합니다. STL의 설계로 인해 해당 알고리즘은 다른 컨테이너와 쉽게 작동 할 수 있으며 Qt 컨테이너는 STL 알고리즘과 작동하도록 설계되었습니다. 정말 상생입니다.
MSalters

12

Qt에 소스 파일을 처리해야하는 자체 메타 컴파일러가 있다는 점을 고려하면 Qt 코드를 "단지 C ++"로 간주하기는 어렵습니다.

그러나 더 중요한 것은, Qt가 사용하고 장려하는 C ++ 의 스타일 은 1995 년경 우리 주변에서 마지막으로 보았던 것입니다.

실제로 C ++을 가능한 한 Java와 같은 것으로 만들려는 시도입니다. 실제로 C ++를 오늘날 사용할 가치가있는 모든 놀라운 것들을 놓치거나 낙담 시킵니다. 대신, 대부분 열등한 자바처럼 느껴지는 서브셋에 갇혀 있습니다.

따라서 C ++을 배우는 것이 목표라면 Qt를 피하십시오. 설정된 라이브러리를 시작점으로 사용하려면 대신 Boost를 살펴보십시오. 부스트는 오늘날 좋은 것으로 간주되는 관행을 구현합니다 .

그러나 솔직히 C ++ 언어 를 배우고 싶다면 좋은 교재를 들고 언어에 집중 하십시오 .

웹 브라우저를 작성하는 방법에 상관없이 웹 브라우저에 대해 가장 잘 가르쳐 줄 것입니다. 사용중인 언어에 대해 많이 알려주지 않습니다.

언어로서의 C ++에는 WebBrowser 클래스가 내장되어 있지 않습니다. C ++ 표준을 읽으면 브라우저에 대해서는 아무 것도 말하지 않습니다 . GUI 응용 프로그램은 언급하지 않았습니다.

그것은 Qt 와 같은 라이브러리에 의해 제공되는 것들 위에 구축 되었기 때문 입니다. C ++은 다른 프로그래밍 언어와 마찬가지로 논리, 논리 표현 방법에 관한 것입니다. 그리고 그것은 배열과 포인터와 루프 그리고 그 모든 것들을 다루는 것을 의미합니다.

충분한 시간이 주어지면 내장 도구 만 사용하여 웹 브라우저를 작성할 수 있습니까? 관련된 프로그램 논리를 표현하는 방법을 알고 있습니까? 그렇지 않다면 루프와 포인터에 더 많은 시간을 할애 new QWebKit()하고 기성품 라이브러리를 호출 하고 피기 백 하는 일을 줄이십시오 .

"언어의 철학과 힘"은 웹 브라우저가 아니라 배열과 목록 및 루프로되어 있습니다.


4
나는 그들이 새롭기 때문에 그들이 더 낫다고 말한 적이 없다 . 그들은 새롭고 더 낫습니다. 요점은 언어로서의 C ++은이 Java와 유사한 접근 방식에 적합하지 않다는 것입니다. C ++에서 상속 및 런타임 다형성은 고통 스럽습니다. 실제로 객체를 힙 할당해야하기 때문에 처음에는 메모리 누수에 대한 명성을 얻었습니다. 객체 복사가 더 어려워집니다. 또한 비효율적이고 확장 성이 떨어지며 지루한 상용구 코드가 필요합니다.
jalf

2
Qt 는 프로그래밍 스타일을 견딜 수 있도록하기 위해 자체 메타 컴파일러가 필요합니다 . 그게 당신에게 뭔가 말하지 않습니까?
jalf

4
나는 Qt 자체를 방어하지 않았습니다 (내 자신에게 많은 한계가 있음). 당신의 진술 "Qt가 사용하고 격려하는 C ++의 스타일은 우리 주변 사람들에게 1995 년에 마지막으로 보인 것입니다." 이 공식을 사용하면이 스타일에 나쁜 점 (15 세 이상)과 현재의 더 나은 대안이 무엇인지 명확하지 않습니다. 어쩌면 당신이 더 구체적이라면 당신이 의미하는 것이 더 명확해질 것입니다.
Giorgio

3
@JimInTexas : 또한 C ++보다 우선합니다. 네 입장? 90 년대 초반 C ++은 매우 다른 짐승이었습니다. 오늘날보다 결국 Java가 된 것에 훨씬 더 가깝습니다.
jalf

3
@ JimInTexas : 예, 틀렸지 만, 또한 의미하는 바가 분명해야합니다. C ++에서 Java의 디자인 목표를 달성하려는 시도입니다. 자바가 구현 하는 것과 같은 결함이있는 OOP 모델을 구현하려는 시도 입니다.
jalf

9

Qt 프레임 워크를 통해 C ++을 배우고 있습니까?

아마도.

이벤트 처리기에 넣은 코드를보아야합니다.

그러나, 당신이 얼마나 "알고"있는지에 집착하지 마십시오. 우리는 모두 창 프레임 워크를 사용하고 있으며 여전히 배우고 있습니다. 새로운 것을 코딩 / 읽기만하면 C ++을 계속 배울 수 있습니다. 새로운 윈도우 프레임 워크를 배우는 것은 C ++에서 신경망이나 퀵 정렬을 구현할 수 있다는 의미는 아니지만 기술에 큰 도움이됩니다.


5

걱정하지 마십시오. 처음에는 대부분의 코드가 프레임 워크를 사용 하지만 잠시 후에 는 조금이라도 확장 해야합니다. 그런 다음 점점 더 많은 C ++를 사용해야합니다.

또한 Qt의 전체 소스를 사용할 수 있다는 것을 기억하십시오. IDE는 원하는 함수 / 메소드 / 클래스의 정의로 행복하게 안내합니다. 더 깊게 갈수록 더 많은 C ++을 볼 수 있습니다.

다른 사람들은 Qt C ++와 표준 C ++의 차이점에 대해 언급했습니다. 이들은 두 개의 캠프에 해당합니다.

  • 다른 라이브러리 : Qt는 배열, 목록, 세트, ​​해시 맵 등 모든 일반적인 컨테이너를 포함합니다. 그것들은 매우 잘 어울리고 구현은 훌륭하지만 STD 품종은 아닙니다. 여전히 최신 버전 (4.1 이상)에서는 이전 버전 (및 Java 유사 API) 외에도 'STD 유사'API가 있습니다. 결국 디자인 선택 (배열을 사용할 때, 해시 맵을 사용할 때)이 동일하므로 Qt가 아닌 프로젝트에 대해 STD로 변경하는 것은 그리 어렵지 않습니다.

  • moc구문 추가 : 주로 신호 ​​처리를위한 것이지만 몇 가지 더 멋진 루프 구조가 있습니다. 많은 사람들이이 도구가 더 이상 C ++이 아니라고 생각합니다. 그러나 IMHO는 약간 더 똑똑한 매크로처럼 느껴집니다. 느슨하게 결합 된 신호 처리는 좋은 프레임 워크 의 장점이며 정적 유형 언어에서는 수행하기가 어렵다. 현대 C ++에서는 많은 양의 템플릿을 사용하여 수행 할 수 있습니다. 그러나 그것은 Qt가 처음 왔을 때 표준과는 거리가 멀었습니다 moc. 결국, Qt가 아닌 프로젝트를 나중에하고 싶다면 먼저 프레임 워크를 사용할지 그리고 신호가 있는지 확인하십시오. 그렇다면 Qt와 관련하여 익숙한 대부분의 내용이 적용되므로 Qt를 배우는 데 아무런 해가 없습니다.


어떤 루프 개선 기능이 제공 moc됩니까?
Basile Starynkevitch

@Basile Starynkevitch : 아마도 그는 foreach 루프 (내가 많이 사용하는)를 가리킬 것입니다. 이것은 구문 추가이지만 ASAIK는 moc와 관련이 없습니다. 따라서 대답은 다른 방식으로 공식화되어야합니다.
Giorgio

foreach단지 매크로입니다 .... (실제로 Q_FOREACH정의 된 "별칭" <Qt/qglobal.h>). 나는 moc그것이 그것을 처리하고 있다고 생각하지 않습니다 . 그리고 C ++ 11에는 for (auto it : container)구문이 있습니다!
Basile Starynkevitch

@Basile Starynkevitch : 아마도 Qt는 C ++ 11로 옮겨야한다면 깊은 리엔지니어링이 필요할 것입니다. ++ 11.
Giorgio

1
Qt와 Boost를 모두 사용합니다. 두 라이브러리 사이에는 많은 중복이 있지만 Qt는 배우기가 훨씬 쉽습니다.
Jim In Texas

4

Qt는 우수한 GUI 라이브러리를 포함하여 완전한 크로스 플랫폼 툴셋 및 개발 환경을 제공하기 때문에 상용 세계에서 널리 사용됩니다.

또한 뛰어난 '언어'도구를 포함하여 국제화를 완벽하게 지원합니다.

학업 경력을 계획한다면 Qt를 귀찮게하지 않을 것입니다. 반면에 C ++을 좋아하고 유용한 기술을 배우고 싶다면 Qt는 배울 가치가 있습니다.

그리고 그렇습니다. Qt는 C ++이며, 기분이 좋아지면 표준으로 혼합하여 라이브러리를 마음의 내용으로 향상시킬 수 있습니다.


3

Qt를 통해 C ++을 배우는 것은 나쁜 생각입니다. 먼저 어떤 프레임 워크와 무관하게 언어 개념을 배워야합니다. 이것이 c ++ 서적이 여러분에게 가르치는 것입니다. 기본적으로 'for and loops while, arrays, list, pointers'는 프로그래밍 언어의 모든 것입니다. 추가 기능은 프레임 워크에 의해 제공됩니다. 프로그래밍 언어를 배우면 언어를 사용하여 구축 된 Qt 또는 MFC와 같은 모든 프레임 워크를 배울 수 있으므로 응용 프로그램을 빠르게 개발할 수 있습니다. Qt와 관련하여 c ++를 배우면 Java 또는 .Net 개발자처럼 생산성을 높일 수있는 훌륭한 프레임 워크입니다. 곧 Qt를 사용하여 iOS 및 Android 앱을 개발할 수 있습니다.


2

글쎄, C ++을 배우는 가장 좋은 방법은 자체 구문 (표준 C ++) 만 사용하는 것이므로 Qt (또는 다른 프레임 워크, 라이브러리 등)가 아닌 LANGUAGE 항목을 사용할 수 있습니다.

왜? 초보자이기 때문에 다른 비 C ++ 코드 (이 경우 Qt)와 혼합 된 C ++ 코드를 볼 때 C ++의 것이 무엇이고 무엇이 아닌지를 알 수 없으므로 오히려 더 복잡한 프로세스가 될 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.