2009-12-25 3 views
5

실제로 Qt 사용자 인터페이스 시스템을 사용하지 않고 MFC 응용 프로그램의 생산성을 높이기 위해 Qt를 사용하는 것이 합리적입니까?UI 프레임 워크를 사용하지 않고 Qt를 C++ 라이브러리로 사용할 수 있습니까?

유용한 컨테이너 클래스, 문자열 algorithmus, 스레딩 클래스, I/O 클래스 등을 사용하여 현재 MFC 기반 응용 프로그램에 적합한 생산성 라이브러리를 찾고 있습니다. 제 의견으로는 Qt API가 아주 좋습니다. 그러나 UI를 Qt (너무 많은 노력)로 전환하고 싶지 않으므로 Qt UI없이 MFC 앱에서 Qt를 잘 사용할 수 있는지 궁금합니다.

미리 감사드립니다.

파비안 단지 표준 : 라이브러리를 사용하지 왜 컬렉션 클래스에 대한

답변

10

Qt는 여러 모듈로 나뉩니다 (QtGui 중 하나임). 필요한 라이브러리에만 링크하여 응용 프로그램에서 사용하는 모듈을 선택할 수 있습니다.

Qt가 MFC와 상호 작용할 수 있는지 여부를 알 수 없습니다. 하지만 적어도 QString은 std :: string 및 char */wchar 로의 변환을 제공하므로 사용자에게 도움이됩니다.

Qt 문서는 모듈 위에 overview을 제공합니다.

대니얼은 아래에서 지적했듯이 이벤트 루프를 인식해야합니다. 그러나 GUI 모듈없이 이벤트 루프를 사용할 수도 있습니다. QCoreApplication에서 processEvents으로 전화를 걸어 대기중인 모든 이벤트를 처리 한 다음 다시 돌아올 수 있습니다. 지연 삭제가있는주의 사항이 있지만 문서에 해결 방법이 설명되어 있습니다.

+0

이것은 완전히 사실이 아닙니다. Qt에서 이벤트 루프없이 모든 클래스를 사용할 수 없습니다. @ deus-ex-machina399 답변보기 : http://stackoverflow.com/questions/1962103/can-i-use-qt-as-c-library-without-using-its-ui-framework/1962260#1962260 –

+0

감사합니다. 대니얼, 나는 내 대답에 당신의 염려를 포함 시켰습니다. 부스트 언급을 위해 – Storm

0

당신은 단지 그것을 원한다면?

+1

음, 나는 또한 스레딩과 같은 것들을 살펴보고 있습니다. Qt (및 Boost)에는 std가 제공하지 않는 유용한 기능이 있습니다. – Fabian

+0

Qt는 std :: –

+0

이상입니다. OP는 원래 Qt가 MFC 컬렉션 클래스를 대체하기를 원한다고 말했습니다. –

2

Mumble project은 클라이언트와 서버에 Qt를 사용합니다. 서버에는 UI 코드가 전혀없고 Qt API의 나머지 부분을 광범위하게 사용합니다.

5

물론, GUI 라이브러리를 사용하지 않고 QT 툴킷을 사용할 수 있습니다.

필요에 따라 많은 것들을 돕는 정상적인 API 세트를 제공하는 boost 라이브러리를 고려할 수 있습니다. 필자는 개인적으로 멀티 플랫폼 방식으로 네트워크 소켓을 처리하는데 사용하지만 더 많은 것이 있습니다.

+0

+1. –

3

예, QtGui 모듈을 프로젝트 (.pro)에서 제외시키기 만하면됩니다. 기본적으로 포함되어 있습니다.

QT -= gui 

코어 모듈 만 사용됩니다.

7

사용할 수있는 유틸리티 클래스가 있지만 아주 중요한주의 사항이 있습니다. Qt는 이벤트 루프에 크게 의존합니다. 이벤트 루프는 QApplication::exec()을 호출하여 시작됩니다. 이제 많은 Qt 클래스는 신호에 의존하고 슬롯 메커니즘은 Qt입니다. 신호와 슬롯은 올바르게 작동하는 이벤트 루프에 전적으로 의존합니다.

이것은 GUI 모듈에서 완전히 사실이지만 다른 모듈들 중 일부에도 해당됩니다. QObject에서 파생 된 모든 클래스가 신호와 슬롯을 사용할 것으로 기대할 수 있으므로 이벤트 루프가 없으면 사용할 수 없습니다.

+0

흠, 잘 알고 있습니다. 이론적으로 Qt 이벤트 루프를 MFC 앱 내에서 비 ​​차단으로 처리 할 수 ​​있습니까? 아니면 이로 인해 혜택보다 더 많은 문제가 발생합니까? – Fabian

+1

@Fabian : 매우 복잡하고 번거롭기 때문에 QApplication 및 QCoreApplication이라는 메인 이벤트 루프 클래스는 프로그램의 전체 상태를 나타내는 것으로 가정합니다. 신호와 슬롯을 완전히 놓쳐 버리는 것이 안전하고 안정적입니다. 그것도없이 QtNetwork를 사용할 수 있습니다. 그냥 차단 호출을 사용하십시오. – blwy10

+0

+1 다른 답변에서 이벤트 루프를 해결하지 못했습니다. 이는 Qt의 핵심입니다. –

관련 문제