최근 우분투 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 ++ 프로그래머로서 자신을 가장 시장에 내놓을 수 있습니까?
답변
그런 이유로 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 ++을 더 단순하게 만드는 자체 유틸리티 클래스를 갖게 될 것입니다.
답변
나는 Qt에 대한 높은 찬사에 동의하지만 문제는 일반적인 C ++과 STL을 가장 많이 사용하도록 허용하는 최고의 GUI 프레임 워크 는 무엇입니까? 이와 관련하여 Qt는 정신 분열증이 적습니다. STL 컨테이너와 알고리즘을 자체 왜곡으로 복제합니다. 또한 STL과 다른 컨테이너를 제공합니다. Qt와 STL 간의 상호 운용성이 항상 원활한 항해는 아닙니다. 어떤 경우에서 얻을 수있는 몇 가지 함수 호출을 필요 std::string
에 QString
다시.
wxWidgets에는 STL 컨테이너를 독점적으로 사용하는 STL 빌드 옵션이 있습니다. Qt의 경우와 같이 집에서 재배치 한 대체 기능이있는 병렬 유니버스는 없습니다. 또한 비표준 확장이 필요없는 표준 C ++ 컴파일러로 컴파일됩니다. 고려할 가치가있는 양질의 GUI 프레임 워크입니다.
GTK +를 둘러싼 C ++ 래퍼 인 gtkmm을 볼 수도 있습니다. Qt보다 첫 번째 요구 사항을 충족시키는 데 더 가깝습니다.
답변
std :: string 또는 std :: iostream 또는 std :: vector와 같은 특정 STL 라이브러리를 사용하지 않는 것에 대해 너무 걱정하지 않아도됩니다. QT 등가물은 다른 풍미가 있지만 문제를 일으키기에는 아직 멀지 않습니다.
내 의견의 관용적 차이는 new
할당 에 사용하는 프로그래밍 스타일 인 것 같습니다 . QT 프로그램의 경우 Gui 부분에는 문제가 없지만 C ++ 및 RAII의 장점은 실제로 힙 대신 많은 데이터를 스택에 유지할 수 있다는 것입니다. 비 GUI 코드 작성으로 전환 할 때이를 기억해야합니다.