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::string에 QString다시.

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.