source

WPF/C# 및 Qt/C++ 중에서 선택

lovecheck 2023. 5. 22. 21:09
반응형

WPF/C# 및 Qt/C++ 중에서 선택

저와 저희 팀은 C++로 작성된 백엔드와 OpenCV, MIL 등의 라이브러리를 사용하는 애플리케이션을 개발하고 있습니다.

이제 GUI가 이미지를 표시하고 사용자가 이미지와 상호 작용하여 주석을 달거나 표시한 다음 C++로 작성된 이미지 처리 알고리즘을 실행하여 결과를 표시할 수 있도록 이 프로그램과 인터페이스할 수 있는 GUI를 개발해야 합니다.

GUI의 경우 WPF와 Qt 중 하나를 선택해야 합니다. 개인적으로 WPF가 Qt보다 더 쉽고 강력하다는 것을 알게 되었습니다. WPF가 Linux로 이식 가능하지 않다는 것을 이해하지만, 이것에 대해 너무 걱정하지는 않습니다.또한 WPF는 DirectX 기술을 사용합니다. 이 기술은 나중에 3D 시각화를 생성하기 위해 사용해야 할 수도 마찬가지입니다.

다음 사항에 대해 도움을 주시기 바랍니다.

  1. WPF를 Visual C#이 아닌 C++로 직접 인터페이스할 수 있습니까?
  2. 만약 (포인트 1)이 가능하지 않다면, 이것을 고려하세요: C++의 코드는 클 것이고, 일부 라이브러리도 포함될 것이기 때문에, C#을 사용하여 C++ 함수를 호출할 수 있습니까? 관리되지 않는 내 비 OOC++ 코드를 WPF와 함께 작동하는 것보다 Qt를 학습하는 데 투자하는 시간이 더 적을까요?

(C++를 WPF와 인터페이스하기 위해 너무 많은 코드를 작성해야 할 것 같아서 실제 프로그램의 절반을 다시 쓰는 것과 같을 수도 있습니다... :-( )

저는 C++과 WPF 모두에서 Qt를 사용해 왔습니다.저는 사용자 인터페이스 프레임워크로 WPF를 훨씬 선호합니다.Qt는 나쁘지 않습니다. 특히 4.0 이후입니다.이전 버전의 Qt에는 손도 대지 않을 것입니다.

다른 사람들이 논평에서 말했듯이, WPF는 더 잘 문서화되어 있고 온라인 커뮤니티는 더 큽니다.만약 당신이 스타일드 애플리케이션을 고려하고 있다면, WPF는 확실히 좋은 방법입니다.새로운 Qt의 선언적 언어는 그 길을 따라가는 좋은 단계이지만, 너무 새로운 것이기 때문에 약간 버그가 있는 경향이 있습니다. WPF는 더 오래 있었고, 더 성숙하고 기능이 풍부합니다.

하지만, 당신의 경우의 진짜 문제는 당신이 가지고 있는 c++ 코드 베이스라고 생각합니다.

WPF는 C++ 코드 기반과 올바르게 연결하기 위해 C++/CLI 계층(관리되는 C++)이 필요합니다.이것은 복잡한 것처럼 들리고 약간의 노력이 필요하지만, 말도 안 되는 소리는 아닙니다.그리고 이것에 대한 수많은 문서들도 있습니다.개인적으로 저는 핀보케를 멀리할 것입니다.

Qt는 c++ 기반이기 때문에 조금 더 쉽지만, c++ 네이티브 유형과 내부적으로 사용되는 Qt 유형(예: QString, QList 등) 간에 약간의 변환이 가능합니다.

고려해야 할 또 다른 사항은 UI에 대해 어떤 모양과 느낌을 원하는지입니다.예를 들어 멋진 리본(오피스 2008, 2010) 모양을 생각하고 있다면 Qt로는 얻을 수 없습니다.또한, 많은 타사 WPF 컨트롤이 있지만 Qt에 대한 많은 것을 찾지 못했습니다.경우에 따라 Microsoft에서 기본적으로 제공하는 컨트롤을 보완하기 위해 좋은 컨트롤 세트를 구입하는 것이 매우 편리합니다.

리눅스 UI를 사용할 필요가 없는 지난 몇 년 동안 우리는 코드 기반에 상관없이 WPF를 사용해 왔습니다.우리는 아직 후회하지 않았습니다.

하지만, 저는 또한 세 번째 옵션을 제안할 것입니다.코드잭은 MFC를 기반으로 하는 UI 프레임워크입니다.C++ 및 ActiveX 기반입니다.그것은 꽤 정교해졌습니다.여기서 확인해 보세요.

편집: QML은 제가 처음 본 이후로 많이 발전했습니다.자세히 볼 시간이 없었지만, 제가 들은 바로는 매우 흥미로운 특징들을 제공합니다.그것은 한 번 더 볼 가치가 있습니다.

또한 몇 가지 설명에서 알 수 있듯이 리본과 같은 Office와 같은 컨트롤과 Qt 도구 집합에 추가된 일부 다이어그램 및 그래프 컨트롤이 있습니다.이것들은 Qt를 흥미로운 전망으로 만듭니다.

하지만 프로그래머로서 WPF로 UI를 만드는 것이 훨씬 쉽다는 것을 알게 되었고, Qt로 코딩한 그 어떤 것보다 제 결과에 더 만족합니다.

C++인 경우 Qt를 고수하십시오. 프로젝트의 3D 부분은 Qt의 OpenGL 위젯으로 처리할 수 있습니다.WPF 경로를 선택하면 C# 또는 VB.net 에서 일부 작업을 수행해야 합니다(항상 잘못된 작업 방식).C++과 함께 WPF를 사용하는 것은 큰 이점이 없습니다.게다가, 당신의 나머지 코드는 C/C++입니다. 당신의 필요에 맞습니다.OpenCV, MIL 등은 WPF로 P/Invoke 호출을 하는 것보다 Qt와 통합하기가 다소 쉽습니다(이로 인해 지연이 발생하기도 함).순 마셜링).

만약 당신이 이미 큰 C++ 코드베이스를 가지고 있다면, 나는 당신이 Qt를 고수해야 한다고 말하고 싶습니다. WPF는 그들이 말하는 것만큼 훌륭하지도 않고 개발하기도 쉽지도 않습니다.C++ 및 Qt는 잘 알려진 팀이지만 WPF를 사용하는 일반 C++(.NET이 아님)는 그렇지 않습니다.

WPF는 UI 프레임워크이며 프로그래밍 언어가 아닙니다.WPF 애플리케이션은 C# 또는 VB.NET으로 작성할 수 있습니다..NET 응용 프로그램의 기본 C++ 코드를 사용하려면 두 가지 옵션이 있습니다.

  1. Pinvoke - 기본 라이브러리에서 일반 C API를 호출할 수 있습니다.Pinvoke는 C++ 클래스와 함께 사용할 수 없으며 함수만 사용할 수 있습니다.VB6의 API 호출과 동일한 방식으로 작동합니다.

  2. C++/CLI 래퍼를 사용하여 C#/VB .NET 클라이언트에서 사용할 수 있는 .NET Dll을 작성할 수 있습니다.내부적으로 이 DLL은 네이티브 C/C++ 라이브러리를 사용합니다.

WPF가 마음에 들고 크로스 플랫폼 솔루션이 필요하지 않다면 사용할 수 있습니다.상호운용성 부분을 배워야 합니다. C++/CLI는 상당히 복잡한 언어이지만 네이티브 C++과 .NET을 모두 알고 있는 프로그래머는 배울 수 있습니다.

반면 Qt는 기존 C/C++ 코드를 직접 사용할 수 있도록 허용하고 교차 플랫폼 솔루션을 제공합니다.

지난 몇 년 동안 저는 SWIG를 사용하여 순수(관리되지 않는) C++ DLL을 WPF 애플리케이션에서 사용할 수 있도록 만들었습니다.그것은 아주 잘 작동하고, 전혀 문제가 없으며, 이것은 항전 유지보수 트레이너와 같은 큰 응용 분야에 사용됩니다.

SWIG는 인터페이스 파일 세트 하나로 C++ DLL을 C#, Python, Lua, Java와 같은 여러 언어로 내보낼 수 있는 모든 비계 코드를 생성할 수 있기 때문에 좋습니다. SWIG는 C# 또는 Lua에서 C++ 클래스를 확장할 때 필요한 코드를 생성합니다.언어 간의 전달 예외를 처리합니다(예를 들어 Lua 스크립트는 C++ 계층을 통해 유입되는 예외를 던지고 C# 수준에서 포착할 수 있습니다).우리는 절대 핀보케를 만질 필요가 없습니다 (SWIG가 모든 것을 합니다).놀라운 일이죠.

이러한 방식으로 동일한 SWIG 인터페이스를 통해 GUI에 WPF(C#, .NET 4 포함), SWIG를 통해 통합해야 하는 일부 기존 라이브러리에 대한 네이티브 C++ 백엔드(SWIG를 통해)를 사용할 수 있으며 애플리케이션 스크립팅을 지원하는 Lua 인터프리터(SWIG, 동일한 .i 인터페이스 파일,Lua-icxx는 LuaC API 인터프리터 스택과의 인터페이스를 단순화하기 위해 소스포지에 있습니다.

저는 이 스레드가 시작된 지 2년이 지난 지금 Qt/QML이 WPF/XAML과 어떻게 비교되는지 궁금합니다.WPF에서 한동안 사용할 수 있었던 3D 내장 Qt3D가 있습니다(OpenGL 또는 DirectX 없이 기본적으로 3D 캔버스 지원).

디자이너 및 툴링 지원을 받으려면 WPF 코드가 C# 또는 VB여야 합니다.C#과 C++ 간의 상호 운용은 관리 코드와 관리되지 않는 코드가 혼합된 코드로 컴파일되는 C++의 모듈을 코딩할 수 있는 혼합 모드 어셈블리를 사용하여 매우 유용합니다.이것은 당신의 네이티브 C++ 라이브러리에 타입 세이프 인터럽트를 제공합니다.

혼합 모드 어셈블리에 대한 자세한 내용은 여기를 참조하십시오.우리는 그들을 보증할 수 있습니다.

IMO의 중요한 고려 사항 중 하나는 WPF 학습 곡선입니다.만약 당신이 당신의 팀을 데려올 수 있다면, 저는 그것이 매우 생산적일 수 있다고 믿습니다.

WPF 시나리오에서는 관리되지 않는 C++로 WPF(즉, xaml 보기)에서 직접 인터페이스하지 않습니다.항상 C++ 모듈을 VB 또는 C# 관리되는 래퍼로 포장하고 싶을 것입니다. (이론적으로 C++ 래퍼를 사용할 수 있지만 이 작업을 수행하는 데는 화가 날 것입니다.) WPF에는 최소한 .NET 언어로 작성된 씬 View 모델이 필요합니다. WPF는 관리되지 않는 코드에 직접 액세스할 수 없습니다. 따라서 문제는 "더 많이 가능"입니다.NET 앱은 관리되지 않는 C++와 인터페이스를 제공합니까?"라고 물었고, 대답은 "예, 물론입니다."입니다.

http://msdn.microsoft.com/en-us/library/aa984739(v=VS.71).aspx

언급URL : https://stackoverflow.com/questions/5091023/choosing-between-wpf-c-and-qt-c

반응형