QT-C ++ 대 Generic C ++ 및 STL [닫기]


19

최근 우분투 QQ에서 내 C ++을 닦았습니다. 나는 특히 GUI 구축을 위해 Qt 프레임 워크를 좋아합니다. 지난 몇 년 동안 PyQt를 사용할 때 그것에 익숙해졌습니다.

PyQt를 사용할 때 Qt와 함께 C ++을 사용할 때 더 두드러지는 몇 가지 문제가 있습니다. Qt에는 Qt에 특정한 C ++에 대한 많은 확장이 있습니다. C ++과 STL에 대해 전혀 몰라도 C ++을 사용하여 Qt 애플리케이션을 작성할 수 있습니다.

곧 구직 시장에 다시 진출해야 할 수도 있고 C ++ 포지션을 고려하고 싶습니다. 그러나 Qt에 너무 많이 바인딩하면 제네릭 C ++로 작업 할 수있는 능력이 제한적이지만 한 번은 강력했지만 지금은 길고 휴면 상태입니다.

Qt를 피해야합니까? GUI를 빌드하기 위해 WxWidgets 또는 GTK ++를 사용하는 것이 더 나을까요?

제네릭 C ++ 및 STL을 최대한 활용할 수있는 최상의 GUI 프레임 워크는 무엇입니까? GUI 프레임 워크 등에 관해서 어떻게 C ++ 프로그래머로서 자신을 가장 시장에 내놓을 수 있습니까?

답변:


15

그런 이유로 Qt를 사용하지 않는 것이 좋습니다. Qt의 모든 유틸리티 클래스를 사용할 필요는 없습니다. STL을 대체하는 제품의 경우 QString 및 QStringList를 사용해야합니다. 또한 일반적으로 GUI보다 훨씬 많은 프로그램이 있습니다. 프로그램의 나머지 부분에는 항상 일반 C ++ 만 사용할 수 있으며 GUI에는 Qt를 사용할 수 있습니다.

제 생각에 STL을 사용하는 것은 기본 데이터 구조가 사용되는 것과 그 복잡성을 이해하고 결과적으로 각 컨테이너를 사용해야하는 시간을 이해하는 것입니다. 그리고 C ++ 프로그래밍과 관련하여 특히 매우 중요한 <algorithm> 헤더를 사용하는 방법을 알아야합니다.이 헤더는 STL과 호환되므로 Qt의 컨테이너에서도 작동해야합니다.

내부적으로 구현 된 방법을 알고 있거나 최소한 일반적인 아이디어를 가지고있는 한 Qt가 제공하는 모든 확장을 사용하면 크게 해를 끼치 지 않습니다. Q_OBJECT, SIGNAL (), SLOT (), foreach ()와 같은 것은 마술이 아니라 유효한 C ++ 문으로 확장되는 매크로라는 것을 알고 있어야합니다. 예를 들어, Qt를보다 Java와 같은 느낌으로 만드는 암시 적으로 공유 된 클래스와 부모-자식 관계가 어떻게 구현되는지 이해하는 것이 그렇게 복잡한 것은 아닙니다. 일반 C ++로 수행 할 수 있는지 확인하고 Qt에서 사용하는 것이 나쁘지 않은지 확인하기 위해 항상 별도의 프로젝트에서 일부 기능을 다시 만들 수 있습니다.

또한 Boost 라이브러리를 살펴보십시오. 표준 C ++ 라이브러리가 제공하지 않는 추가 유틸리티를 제공하며, 일반 C ++과 동일한 규칙을 따르기 때문에 일반 C ++에 조금 더 가까워지는 좋은 방법입니다. 일부 라이브러리는 상당히 복잡한 템플릿 클래스를 가지고 있으며 그 작동 방식을 이해하려고 시도하는 것 자체가 C ++에 대한 훌륭한 연구입니다. Boost에는 Qt에서 찾을 수없는 많은 유틸리티가 있으며 Qt의 클래스와 동일하거나 유사한 개념을 구현하고 대신 사용할 수있는 유틸리티가 있습니다.

C ++로 작업하는 구직 시장을 강타한다면 Qt 또는 다른 프레임 워크와 마찬가지로 C ++을 더 단순하게 만드는 자체 유틸리티 클래스를 갖게 될 것입니다.


4
+1 "나머지 프로그램의 나머지 부분에는 항상 일반 C ++ 만 사용할 수 있으며 GUI에는 Qt 만 사용할 수 있습니다."
Md Mahbubur Rahman

@MahbuburRAaman-예-이것은 훌륭한 조언입니다. GUI 및 뒤로 연결하는 데 필요한 항목에만 Qt를 사용하십시오. 범용 C ++, STL, Boost-보편적으로 사용되는 도구를 사용하여 나머지를 작성하십시오.
벡터

5

나는 Qt에 대한 높은 찬사에 동의하지만 문제는 일반적인 C ++과 STL을 가장 많이 사용하도록 허용하는 최고의 GUI 프레임 워크무엇입니까? 이와 관련하여 Qt는 정신 분열증이 적습니다. STL 컨테이너와 알고리즘을 자체 왜곡으로 복제합니다. 또한 STL과 다른 컨테이너를 제공합니다. Qt와 STL 간의 상호 운용성이 항상 원활한 항해는 아닙니다. 어떤 경우에서 얻을 수있는 몇 가지 함수 호출을 필요 std::stringQString다시.

wxWidgets에는 STL 컨테이너를 독점적으로 사용하는 STL 빌드 옵션이 있습니다. Qt의 경우와 같이 집에서 재배치 한 대체 기능이있는 병렬 유니버스는 없습니다. 또한 비표준 확장이 필요없는 표준 C ++ 컴파일러로 컴파일됩니다. 고려할 가치가있는 양질의 GUI 프레임 워크입니다.

GTK +를 둘러싼 C ++ 래퍼 인 gtkmm을 볼 수도 있습니다. Qt보다 첫 번째 요구 사항을 충족시키는 데 더 가깝습니다.


1
'wxWidgets에는 STL 컨테이너를 독점적으로 사용하는 STL 빌드 옵션이 있습니다 ...'-알다시피, 이것이 중요합니다. '경우에 따라 std :: string에서 QString으로 가져 오기 위해 몇 가지 함수 호출이 필요합니다 .'- 이해-아직 조사하지 않았습니다. 나는 GTK와 Wx에 약간 익숙하지만 Qt는 적어도 내 관점에서 비교하는 것처럼 보입니다 .C ++은 제 첫 언어가 아닙니다-Clipper / Delphi 세계에서 왔으며 Win을 다루어야했기 때문에 C ++을 배웠습니다. 등 32S
벡터

2

std :: string 또는 std :: iostream 또는 std :: vector와 같은 특정 STL 라이브러리를 사용하지 않는 것에 대해 너무 걱정하지 않아도됩니다. QT 등가물은 다른 풍미가 있지만 문제를 일으키기에는 아직 멀지 않습니다.

내 의견의 관용적 차이는 new할당 에 사용하는 프로그래밍 스타일 인 것 같습니다 . QT 프로그램의 경우 Gui 부분에는 문제가 없지만 C ++ 및 RAII의 장점은 실제로 힙 대신 많은 데이터를 스택에 유지할 수 있다는 것입니다. 비 GUI 코드 작성으로 전환 할 때이를 기억해야합니다.


1
내가하려고했던 요점은 힙 할당이 일반적으로 나쁘지 않다는 것입니다. 로컬 변수에 가장 좋은 것은 아닙니다. GUI 클래스는 오래 지속되는 경향이 있으며 힙에 가장 잘 할당되며, 일시적으로 만 필요한 로컬 변수는 스택에서 잘 작동합니다. Garbace Collection을 사용하는 C #에서는 곧 소멸되므로 힙도 괜찮습니다. 그러나 수동 new/delete호출 을 사용 하면 쉽지 않고 오류가 발생하기 쉽습니다. 중요한 섹션 (빅 데이터 처리)에서는 차이 delete가 생길 수 있습니다. 특히 통화 속도가 느릴 수 있습니다.
wirrbel

1
이것은 10000 UI 객체의 문제가 아니라 백만 항목 등을 가진 복잡한 트리 데이터 구조의 경우에 한 번 더 똑똑한 할당 방법 (대량 할당 또는 똑똑하게 작성된 부스트 클래스 등)에 의존 할 수 있습니다. 결론 : 힙은 나쁘지 않으며 똑똑하게 사용해야합니다. Qt 방식은 때때로 다른 것들에 맞게 확장되지 않습니다. 내 의견으로 는 여전히 훌륭한 툴킷입니다.
wirrbel

C ++ 11은 어떻습니까? 스마트 포인터 등은 많은 우려를 완화시키는 것처럼 보입니다. 나는 지금 그것을 엉망으로 만들기 시작했다. 내가 말했듯이, 나는 Qt KICKS BUTT에 동의합니다. 내 계획은 GUI에 Qt를 사용하고 C ++ 11을 사용하여 가능한 다른 작업을 수행하는 것입니다. Qt와 C ++ 11의 조합이 큰 승자가 될 수 있다는 느낌이 들었습니다.
벡터

2
나는 당신이 내 견해를 가지고 있다고 생각합니다 : C ++에는 많은 옵션이 있으며 c ++에서는 현명하게 선택해야합니다. 스마트 포인터 등에도 문제가 있습니다. C #을 사용하면 많은 것을 더 잘하는 dlang.org 를 볼 수 있습니다 (GCed).
wirrbel

한편 나는 C ++ 11을 지원하는 툴 체인을 만들어야합니다. 지금은 아주 좋은 IDE 인 codelite를 사용하지만 방금 발견 한대로 11 (GNU 컴파일러)을 지원하지 않습니다 ... 어쩌면 내가 11 호환 컴파일러를 플러그인 할 수 있습니다. D 또는 Boo 등으로 시작하지 않을 것입니다-내가 말했듯이, 나는 곧 다시 취업 시장에 진출해야 할 수도 있으며 '일회성'이 아닌 시장성을위한 주류 언어를 원합니다. 많은 파이썬 작업이 있습니다. 너무 나빠서 더 이상 파이썬을 견딜 수 없습니다!
벡터
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.