簡體   English   中英

C++ GUI 編程建議

[英]Advice for C++ GUI programming

我已經編寫 C++ 控制台/CMD-line 應用程序大約一年了,並且想進入 Windows GUI 應用程序。 對於那些以前走這條路的人,你能給我什么建議/提示。 例如:好的閱讀材料、教程、方法策略等...

我知道這是一個非常廣泛的問題,但我真的不知道如何/從哪里開始,因此不知道如何正確提出這個問題。

我強烈推薦使用Qt 庫,原因如下:

  1. 該框架可免費用於 Windows、Linux、MacOS X 和一些移動系統。 從 4.5 版開始,許可證是 LGPL,這基本上意味着您甚至可以在商業應用程序中使用 Qt。
  2. Qt 的設計非常出色,例如它們使用現代設計模式和非常一致的界面設計(我不知道還有多少其他庫如此完美地使用面向對象的思想)。 使用 Qt 與使用 Boost 相同:它會提高您自己的編程技能,因為它們使用了如此美麗的概念!
  3. 它們非常快,例如在渲染方面(由於 OpenGL、DirectX 等的后端不同)。 只需觀看此視頻,您就會看到使用 Qt 可以輕松完成但使用本機 Windows、Mac 或 Linux 編程難以實現的事情。
  4. 他們有一個非常好的文檔,有大量的教程和非常好的參考。 您可以使用給定的文檔輕松開始學習 Qt! 該文檔也可在線獲取,因此請自行查看。
  5. 如前所述,Qt 是跨平台的 您擁有一個適用於所有重要操作系統的源代碼庫。 當您還可以“免費”使用 Mac 和 Linux 時,為什么要將自己限制在 Windows 上?
  6. Qt是如此不“僅僅”用戶界面更為; 它們還提供網絡和數據庫功能、OpenGL 綁定、功能齊全的 Web 瀏覽器控件(基於 WebKit)、多媒體播放庫等等。

老實說,我浪費了幾年時間為 Windows本地開發軟件,而我本來可以更有效率。

對於 C++,您有兩種選擇,Native 或 Managed。

對於本機開發,我的團隊(在 Microsoft,在 Windows 中)使用Windows Template Library 它對我們非常有效。

您應該了解 Win32 的基礎知識以及窗口的工作原理。 規范的書目是Programming Windows®

對於托管開發,您可以將 C++ 與Windows Forms 一起使用 但是,Windows 窗體已被Windows Presentation Foundation (WPF)所取代。

大多數窗口庫和技術使用類似的習慣用法。 選一個學習一下。

Windows 模板庫是 Microsoft Windows 的一個非常好的貼面,同時堅持使用 C++。

對於跨平台 C++ 窗口工具包(它們適用於 Microsoft Windows 以及其他平台),您可以嘗試QTwxWidgets

我對 Windows C++ GUI 編程的最佳建議是不要進行 Windows C++ GUI 編程。

我意識到如果它不合格,這是一個非常缺乏信息/聰明的回應,所以我會注意到你沒有聲明你需要進行 C++ Windows GUI 編程,而是你“想要進入 Windows GUI 應用程序”。 如果是這種情況,並且您沒有使用 C++ 的非常具體的理由(即用 MFC 編寫的龐大的現有遺留代碼庫或一堆您想要為其構建前端但會很痛苦的 C++ 代碼)暴露給 .NET 代碼),那么走 .NET 路線並開始學習 Windows 窗體或使用 C# 或您選擇的其他 .NET 語言的更好的 WPF 將變得更加容易和高效。

如果您確實需要使用 C++,那么我會推薦第三方工具包,如 Qt 或 wxWidgets,因為 Microsoft 的 C/C++ GUI 編程工具的狀態現在非常糟糕。

好吧,對於 Windows GUI,假設您想直接處理 API,請習慣於大量引用 MSDN。

我最喜歡的基礎知識學習資源是theForger 的教程,但那里有數百本書和其他網站。

我想一個重要的起點是你的工具包。 你標記了這個visualc++,所以我假設你正在看那個,但是請記住還有其他工具包,比如Qt。

我建議從Microsoft 的教程開始

拋開 WPF 或 VC++ 或 Qt,您還可以嘗試幾個庫,例如:

  • 開放框架
  • 加工
  • ...
  • 這里有一個使用 Openframeworks 開發 Gui 的活躍項目:
    http://www.syedrezaali.com/blog/?p=2172

    第一個問題是你想用 C++ 開發免費的、開源的、供個人使用的還是商業應用程序?

    1. 如果您想開發供個人使用! 然后你可以使用一些好的 C++ 工具包、框架或 API。
    2. 如果您想開發一個開源或免費的 GUI 應用程序。 然后,您可以使用具有 GPL 或任何符合您需要的開源許可證的 C++ 工具包、框架或 API。
    3. 甚至您也可以使用具有 LGPL 許可的開源工具包、框架或 API 來開發商業應用程序。

    第二個問題是你想為 Windows、Mac、Unix 還是 Linux 進行開發? 或者所有這些,甚至對於移動平台?

    1. 如果你有一個像我一樣的 Windows 用戶,並且只想為 Windows 開發,我的意思不是跨平台,你可以使用 Win32 API,雖然學習 Win32 API 更難,但它可以讓你完全控制機器。 相信我,沒有其他工具可以讓您完全控制機器。 如果您不喜歡 Win32 API,無論出於何種原因,您都可以使用 MFC,這是 Microsoft 的另一項技術,但它不是免費的、陳舊的並且現在很少受到關注。 如果您決定使用 .NET 平台進行開發,您可以使用 C++/CLI,這是用於開發 .NET 應用程序的 C++ 語言的擴展。 .NET 為您提供類型安全、OOP 和內置垃圾收集器,在一個包中為您提供與 Windows 和 x86 或 x64 機器相關的所有 API。 .NET 有自己的世界! Microsoft 也決定將 .NET 移植到其他操作系統,Mono 項目就是一個例子......您可以使用 .NET 開發幾乎所有類型的應用程序。

    2. 如果您想開發跨平台的 C++ GUI 應用程序,那么 Qt、WxWidgets 和 U++ 可以為您提供幫助。 您可以使用這些庫編寫一次並部署到任何地方。 許多開源 IDE 和編譯器也可用於輕松開發 C++ 應用程序。 請注意,如果您不想為跨平台開發,任何跨平台庫都將是開銷並且不可避免地增加可執行文件的大小。

    您的 C++ 知識是否足以編寫軟件系統?

    事實上,如果你對 C++ 的了解不夠深入,你不了解 OOP、Encupsolation、Classes、Interfaces、Types、Programming Patterns 等編程方法,你不能使用任何具有充分潛力的工具包。 不要忘記每個工具包、框架或 API 都是用某種編程語言實現的。 如果您確實非常了解該語言,則可以很好地使用該工具包。 我想,你會明白我的意思。

    +1 為 Qt。 我會將文檔放在我對 GUI 系統的要求列表的頂部。 Qt 有很棒的文檔,而且背后有一個龐大的社區。 還有幾本關於它的書。 如果您獨自工作而沒有其他團隊成員可以依賴,那么好的文檔非常重要。 替代品有 wxWidgets、MFC、WTL、FLTK 等等。 他們都有優點和缺點。 例如,FLTK 很小,只提供 GUI,而 Qt 和 wxWidgets 還包括網絡、數據庫訪問等。 Qt 似乎在諾基亞收購后的那一刻最具動力,例如 Qt Creator 的發布,它使您能夠在 Visual Studio 之外開發應用程序.

    自從我在 Windows GUI 上使用 C++ 已經很久了,我的話總是避免在 Windows GUI 中使用 C++,除非你有一個很好的理由,我的意思是一個很好的理由,如果你需要一些性能 C# 對 90 來說綽綽有余% 的情況下,如果您需要更多功能,請在 C++ dll 中編寫性能關鍵的東西,並從 Windows 窗體或 WPF 應用程序調用它。 它會為你節省很多時間。 仍然是我的意見,如果你有另一個我完全尊重

    我們在 2020 年,但問題仍然相關。 我同意 Qt 用戶的看法,這是一個很棒的框架。

    但是,還有C++Builder可以在設計時為您提供可視化的設計 GUI。 C++Builder 應用程序可以在 VCL(僅限 Windows)和 FireMonkey(跨平台)框架上構建。 Clang 編譯器可以生成 32 位和 64 位本機可執行文件。 C++Builder 社區版是免費的。 Delphi 集成是無縫的:C++Builder 項目可以直接包含 Delphi 文件並使用任何現有的 Delphi 組件包和庫。

    您熟悉 Microsoft Visual Studio 和 .NET 技術嗎? 既然您想針對 Windows 平台進行開發,為什么不從查看Microsoft Visual C++ Express Edition 開始呢? 使用 MS 的可用工具進行一些探索並搜索一些教程。

    暫無
    暫無

    聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

     
    粵ICP備18138465號  © 2020-2024 STACKOOM.COM