폐쇄 . 이 질문은
의견 기반 입니다. 현재 답변을 받고 있지 않습니다.
댓글
Answer
정말 뻔뻔스러운 답변이 될 생각은 없지만 이것이 제가하는 이유입니다. 개인적으로 Qt를 사용하지 않습니다. 이에 대해 말할 좋은 점이 많습니다. 즉, API가 대부분의 시간에 작동하고 플랫폼을 원활하게 연결한다는 점입니다.하지만 Qt를 사용하지 않는 이유는 다음과 같습니다.
- 어떤 경우에는 네이티브 프로그램처럼 보이지 않습니다. 모든 플랫폼에 대해 단일 UI를 디자인하는 것은 다양한 시각적 스타일링 이유로 인해 컴퓨터에서 컴퓨터로 이동할 때 제대로 보이지 않을 것입니다. 예를 들어 Mac 컴퓨터에서 분할 막대는 일반적으로 상대적으로 두껍고 버튼은 작고 둥글며 아이콘이 있습니다. Windows 시스템에서 분할 막대는 일반적으로 좁고 버튼은 더 정사각형 디자인으로 텍스트가 더 많습니다. 모든 플랫폼에 대해 하나의 UI를 작성할 수 있다고해서 대부분의 응용 프로그램에서 사용해야한다는 의미는 아닙니다.
- Qt는 단순히 링크 가능한 C ++ 라이브러리 집합이 아닙니다. 사용중인 빌드 시스템은 특정 파일을 추가 소스 파일로 변환해야하므로 대부분의 다른 라이브러리와 비교할 때 빌드 프로세스가 훨씬 더 복잡해집니다.
- (2), C ++ IDE 및 도구의 결과 Qt의 특성을 이해하지 못하기 때문에 Qt 표현식을 오류로 표시 할 수 있습니다. 이로 인해 거의 QtCreator 또는
vim
와 같은 텍스트 전용 편집기를 사용해야합니다.
- Qt 는 많은 양의 소스이므로 컴파일하기 전에 사용하는 모든 컴퓨터에 사전 설치되어 있어야합니다. 이로 인해 빌드 환경 설정이 훨씬 더 지루할 수 있습니다.
- 부품은 대부분 LGPL에 따라 라이센스가 부여되므로 더 제한적이거나 덜 제한적인 라이선스로 릴리스해야하는 경우 단일 바이너리 배포를 사용하기가 어렵습니다.
- 비슷하게 작성된 " plain ol “기본 애플리케이션 " (과정 애플리케이션 작성은 제외) KDE의 경우 10 개).
댓글
답변
사람들이 말하듯이 각 도구는 각 문제와 상황에 적합합니다 …
하지만 C ++ 프로그래머라면 Qt가 프레임 워크입니다. 경쟁자가 아닙니다.
우리는 복잡한 의료 영상 상용 응용 프로그램을 개발하고 Qt는 계속 유지합니다.
그렇다고 말하지 않습니다. 사람들이 그것에 대해 말하는 “단점”은 거짓이지만, Qt를 오랫동안 시도하지 않았다는 느낌이 있습니다 (각 새 버전에서 지속적으로 개선됨 …) 그리고 대부분이 언급하는 모든 문제 주의하면 문제가되지 않습니다.
UI 플랫폼 불일치 : 사용자 정의 또는 사용자 정의 아트없이 UI 위젯을 “있는 그대로”사용하는 경우에만 해당됩니다.
Qt 전 처리기 과부하 : 신호 슬롯 메커니즘 또는 QObject 상속을 남용하는 경우에만 실제로 필요하지 않습니다.
그런데 우리는 여전히 C # .NET으로 애플리케이션을 작성하고 있습니다. 오랫동안 해왔습니다. 그래서 저는 넉넉한 관점을 가지고 있다고 생각합니다.
말했듯이 각 상황에 대한 각 도구는
그러나 Qt는 의심 할 여지없이 일관되고 유용한 프레임 워크입니다.
댓글
답변
Qt에 대해 내가 싫어하는 모든 것 중에서, 템플릿과 잘 어울리지 않는다는 사실이 저를 가장 괴롭 힙니다. 이렇게 할 수는 없습니다.
template < typename T > struct templated_widget : QWidget { Q_OBJECT; public signals: void something_happened(T); };
또한 전처리 기와 잘 작동하지 않습니다. 당신은 이것을 할 수 없습니다 :
#define CREATE_WIDGET(name,type) \ struct name ## _widget : QWidget \ { \ Q_OBJECT; \ \ public signals: \ void something_happened(type); \ }
신호에 응답하는 모든 것이 Q_OBJECT 여야한다는 사실과 혼합되어 Qt가 작동하기 어렵게 만듭니다. C ++ 프로그래머의 경우 Java 또는 Python 스타일 프로그래밍에 익숙한 사람들은 아마도 실제로는 더 좋을 것입니다.
실제로 형식 안전성을 되찾고 Qt 신호를 모든 functor 객체에 연결하는 방법을 연구하고 고안하는 데 많은 시간과 노력을 들였습니다. http://crazyeddiecpp.blogspot.com/2011/01/quest-for-sane-signals-in-qt-step-1.html
내가 원하는 것은 Qt moc에 의해 불가능에 가까운 기본적인 일상적인 C ++ 개발입니다. 지금은 완전히 불필요합니다.
솔직히도 자동화 된 UI 테스트를 수행하려면 Qt가 MFC가없는 유일한 게임이기 때문에이 문제에 집착했습니다. .. 그것은 1980 년이다. (정말 열심히 일하는 것은 짜증 난다) 어떤 사람들은 WX라고 말할지 모르지만 더 심각한 문제가있다. GTKmm은 나의 첫 번째 선택 이었지만 “모든 소유자가 이끌고”접근성을 수행하지 않기 때문에 … “업계 표준 테스트 소프트웨어로 구동 할 수 없습니다. Qt는 그 점에서 충분히 어렵습니다 ( 거의 는 접근성 플러그인을 수정할 때 작동합니다).
댓글
Answer
Qt를 사용하지 않는 한 가지 이유는 Windows와 같은 하나의 아키텍처에 대해서만 작성하는 경우 C # /. NET (또는 Mac의 Cocoa)을 사용할 수 있기 때문입니다. OS의 최신 종소리를 활용할 수 있습니다.
크로스 플랫폼 앱을 작성하는 경우 이미 Java와 같은 다른 기술 (예 : “Java Shop”에서 일함)에 많은 관심이있을 수 있습니다. 기술 선택은 언어 별 API와 같이 개발중인 에코 시스템에 의해 결정될 수 있습니다. 이런 경우 기술의 수를 최소화하는 것이 도움이 될 수 있습니다.
제가 생각할 수있는 세 번째 이유는 Qt가 C ++를 기반으로하고 C ++는 프로그래밍하기가 비교적 어렵고 위험한 언어라는 것입니다. 전문가를위한 언어라고 생각합니다. 최고의 성능이 필요하고 세심한 자세를 취할 수 있다면 C ++가 여전히 최고의 게임 일 것입니다. 실제로 Qt는 범위를 벗어나도록 설정하면 많은 메모리 관리 문제를 개선합니다. 또한 Qt 자체는 많은 불쾌한 C ++ 문제로부터 사용자를 보호합니다. 모든 언어와 프레임 워크에는 장단점이 있습니다. 일반적으로 식당에서 흔히 볼 수있는 속도, 품질 및 가격으로 요약 할 수있는 매우 매우 복잡한 문제입니다 (하지만 두 가지만 선택할 수 있음).
규칙에 따라 유지해야한다고 명시되어 있지만 Qt를 사용하지 않는 일반적인 이유를 잘 요약 한 Billy ONeal이 제기 한 몇 가지 문제에 대해 반박하고 싶습니다.
-
Qt는 실제로 C ++ 라이브러리 / 프레임 워크 / 헤더 파일입니다. 특히 신호와 슬롯을 활성화하는 매크로 프로세서 (moc)에 의해 증가 됩니다. 추가 매크로 명령 (예 : Q_OBJECT)을 변환하여 클래스가 C ++에 Objective-C 기능을 추가하는 것으로 생각할 수있는 내성 및 기타 모든 종류의 장점을 갖도록합니다. C ++에 대해 충분히 알고 있으면 이러한 순수성 부족으로 불쾌감을 느낄 수 있습니다.당신은 프로라면 1) Q_OBJECT와 그것의 ilk를 사용하지 마세요. 또는 2) 이것이 문제를 일으키는 매우 제한된 코너 케이스를 중심으로 프로그램하는 것에 감사합니다. “Use Boost for signal and 슬롯! “그런 다음 나는 당신이 하나의”문제 “를 다른 것으로 교환하고 있다고 반박 할 것입니다. Boost는 거대하며 가난한 문서화, 끔찍한 API 및 크로스 플랫폼 공포와 같은 자체적으로 일반적으로 인용되는 문제가 있습니다 (gcc와 같은 오래된 컴파일러를 생각해보십시오. 3.3 및 AIX와 같은 대형 아이언 컴파일러).
-
편집기 지원의 경우 1부터 이어지는데, 나는 다소 동의합니다. 사실 Qt Creator는 IMHO가 최고의 그래픽 C ++ 편집기입니다. , 당신이 Qt 물건을 사용하지 않더라도. 많은 전문 프로그래머가 emacs와 vim을 사용합니다. 또한 Eclipse가 추가 구문을 처리한다고 생각합니다. 따라서 Qt 매크로 (Q_OBJECT) 또는 신호 / 슬롯 추가에 문제가 없습니다. Visual Studio에서는 이러한 매크로를 찾을 수 없을 것입니다. (나는 인정합니다) C ++에 추가 되었기 때문입니다. 그러나 대체로 C # /. NET 사용자는 자체 독점 기술로 다루는 많은 기능을 가지고 있기 때문에 Qt를 사용하지 않을 것입니다.
-
Qt 소스의 크기는 하룻밤 사이에 컴파일하는 한 누가 신경 쓰나요? 저는 듀얼 코어 Macbook에서 Qt 4를 “하룻밤 미만”으로 컴파일했습니다. 이것이 당신의 결정을 내리는 이유가 아니길 바랍니다. 특정 기술을 사용하거나 사용하지 않습니다. 이것이 정말로 문제가되는 경우 Qt 웹 사이트에서 사전 컴파일 된 Mac, Linux 및 Windows 용 SDK를 다운로드 할 수 있습니다.
-
라이센스는 세 가지 선택 가능 : 1) Qt ITSELF 를 수정하고 공유하지 않으려는 경우 독점 라이센스를 사용하거나 Qt를 사용하고 있고 귀속을 제공하지 않는다는 사실을 숨기려는 경우 (브랜딩에 매우 중요 할 수 있음) 그리고 이미지!) 2) GPL 및 3) LGPL 예, 정적 링크 (Qt를 모두 바이너리로 롤링)에 문제가 있습니다.하지만 내부를 들여다 볼 수없고 유 Qt (속성!)를 부를 수 있습니다. 저는 Digia에서 독점 라이센스를 구입하려고했지만 “당신이하는 일에 대해서는 정말 필요하지 않습니다.”라고 말했습니다. 와우. 라이센스 판매 사업을하는 기업에서.
-
바이너리 / 번들의 크기는 Qt를 가지고 있지 않은 사람들에게 배포해야하기 때문입니다. Windows가 이미 있습니까? Visual Studio 물건이나 런타임을 설치해야합니다. Mac에는 이미 거대한 Cocoa가 포함되어 있으며 동적으로 연결할 수 있습니다. 많이 배포하지는 않지만 50 메가 바이트의 정적 파일 (UPX와 같은 일부 바이너리 스트리퍼 / 압축 유틸리티를 사용하여 더 작게 만들 수 있음)을 배포하는 데 많은 문제를 발견 한 적이 없습니다. 하지만 대역폭이 문제가된다면 빌드 스크립트에 UPX 단계를 추가 할 것입니다.
-
“Native Look and Feel”를 정의하는 것은 무엇입니까? “대부분”은 Mac이 통합 된 모양과 느낌에 가장 가깝다는 데 동의 할 것이라고 생각합니다. 하지만 여기 앉아 Safari, iTunes, Aperture, Final Cut Pro, Pages 등을 살펴보면 OS 공급 업체에서 제작 했음에도 불구하고 똑같이 보이지 않습니다. “느낌”측면이 더 관련성이 있다고 생각합니다 : 위젯 스타일링, 응답 성 등. 응답성에 관심이 있다면 여기에 Java 또는 기타 매우 동적 인 언어보다 C ++를 사용해야하는 좋은 이유가 있습니다. (Objective C도 흔들리지 만 Qt에 대한 신화를 없애려고 노력하고 있습니다.)
요약하면 복잡한 문제입니다. 하지만 신화와 10 년이 지난 정보를 바탕으로 생각할 수 있으므로 “Qt를 사용하지 않을”이유가 적다고 생각합니다.
댓글
답변
일부는 라이선싱입니다. 일부 라이선스 내역은 https://en.wikipedia.org/wiki/Qt_(software) #Licensing 을 참조하세요. 2000 년까지 오픈 소스에 대한 관심이 많았던 사람들은 Qt를 사용하지 않았습니다. 기간. (사실 이것이 Gnome 개발의 원래 동기였습니다.) 2005 년까지 Windows 용 무료 소프트웨어를 출시하고자하는 사람들은 Qt를 사용하지 않았습니다.그 날짜 이후에도 GPL이 아닌 다른 것의 자유 소프트웨어를 원하는 사람들은 Qt를 사용할 수있는 옵션이 없었습니다. 따라서 그 날짜보다 오래된 자유 소프트웨어 프로젝트는 Qt를 사용할 수 없었습니다. 물론 독점 코드를 작성하는 사람들은 특권을 지불해야했습니다.
더욱이 다른 옵션이 부족합니다. 예 : WxWidgets , GTK + 및 Tk 는 모두 오픈 소스, 크로스 플랫폼 툴킷입니다.
또한 오랫동안 Windows는 데스크톱에서 너무나 지배적이어서 많은 소프트웨어가 실행에만 만족했습니다. Microsoft 도구 모음을 설치하면 다른 것에 대해 걱정하는 것보다 Microsoft의 독점적 인 기능을 사용하는 것이 더 쉬우 며 많은 프로그래머가 그렇게했습니다.
댓글
답변
나는 위에서 논의한 거의 모든 이유에 동의하지만 여기에있는 많은 사람들은 Qt가 가져 오는 추가 오버 헤드 때문에 Qt를 사용하지 않을 것이라고 말했습니다. 나는 동의하지 않습니다. 오늘날 가장 일반적인 언어 (자바, C # 및 Python)는 자체적으로 상당한 오버 헤드를 가지고 있기 때문입니다.
둘째, Qt는 C ++ 프로그래밍을 매우 쉽고 간단하게 만들어 추가 리소스를 사용합니다. 저는 쉽게 작성할 수 있기 때문에 표준 C ++가 아닌 Qt로 작성된 콘솔 응용 프로그램을 많이 접했습니다.
Qt의 생산성은 C / C ++보다 크지 만 Python과 같은 언어보다 작다고 말할 수 있습니다.
댓글
이것은 진정으로 “화염 전쟁을 시작하려는 시도가 아닙니다. 몇 가지 요점을 다루고 싶었습니다.
Qt가 “더 널리 사용되지 않는 진짜 이유는”C ++이고 데스크톱 앱에 C ++를 사용하는 사람들이 적기 때문일 것입니다.
Qt는 C ++ 라이브러리가 아닙니다. 별도의 컴파일 단계가 필요하므로 대부분의 다른 라이브러리와 비교할 때 빌드 프로세스가 훨씬 더 복잡해집니다.
The Visual Studio 용 vs-addin은 Qt의 자체 명령 줄 작성 프로세스와 마찬가지로이 작업을 자동으로 수행합니다. MFC 용 대화 상자를 빌드하는 데 사용되는 리소스 컴파일러도 별도의 단계이지만 “여전히 C ++입니다.
Qt는 많은 양의 소스입니다. 컴파일하기 전에 사용하는 모든 컴퓨터에 존재하고 사전 설치되어 있어야합니다. 이렇게하면 빌드 환경 설정이 훨씬 더 지루해질 수 있습니다.
Visual Studio의 각 버전과 소스에서 빌드하는 것은 하나의 명령입니다. 요즘 SDK 소스 크기가 그렇게 큰 문제가되지는 않습니다. Visual Studio는 이제 사용자가 선택하는 대신 모든 C ++ 라이브러리를 설치하므로 컴파일러의 설치 크기는> 1Gb입니다.
It ” s는 LGPL에서만 사용할 수 있으므로 더 제한적이거나 덜 제한적인 라이선스로 릴리스해야 할 때 단일 바이너리 배포를 사용하기 어렵습니다.
LGPL은 lib에만 적용되며 코드에는 영향을주지 않습니다. 예, 단일 바이너리가 아닌 DLL을 제공해야 함을 의미하지만 (비용을 지불하지 않는 한) Java 런타임이나 작은 유틸리티를위한 .Net 업데이트를 다운로드해야하는 세상에서는 그렇게 큰 문제가 아닙니다. “다른 Qt 앱이 라이브러리를 공유 할 수 있도록 단일 ABI가있는 플랫폼에서도 문제가 적습니다.
경우에 따라 그렇지 않습니다.” t는 네이티브 프로그램처럼 보입니다.모든 플랫폼에 대해 단일 UI를 디자인하는 것은 다양한 시각적 스타일링 이유로 인해 컴퓨터에서 컴퓨터로 이동할 때 제대로 보이지 않을 것입니다.
그렇습니다. 기본 위젯과 테마를 사용하는 것입니다. 사용자가 스타일에 너무 신경 쓰지 않도록 주로 기술 앱을 사용한다는 점을 인정해야합니다. 특히 Windows에서 모든 스타일 자체를 스마트 폰 위젯으로 사용하는 새로운 방식은 어쨌든 표준이 점점 더 적다는 것을 의미합니다.
댓글