2013-09-24 14 views
25

我需要編寫一個應用程序,該應用程序與Windows XP/Vista/7本機編寫的內容在視覺上難以區分,它使用最先進的Visual Studio默認使用的任何程序。但我正在開發使用MinGW和Vim(使用C++)。哪一個,如果有的話,實現Windows本機外觀:GTK +,wxWidgets,Qt,FLTK?

特別是,我希望以下控件在上述三個版本的Windows上是原生的:表單chrome,按鈕,複選框,菜單,組合框,進度條,滾動條,富文本框。這對我來說已經足夠了。

我知道,如果你加載GdiPlus和其他像riched32.dll根據需要,並使用Windows API來實例化控制,那麼操作系統將取代其GdiPlus或其他圖書館的版本,所以它看起來像XP XP風格的控件,Vista上的Vista等

但我不想使用普通的Windows API,因爲即使檢索默認字體也需要半個頁面的代碼和類似的故事,無論我想做什麼。所以我想使用一個工具包。

wxWidgets,Qt,GTK +,FLTK似乎是最廣泛使用的。但它們都是跨平臺的。我使用了跨平臺的應用程序,其中許多都有外國的GUI控件(我稱之爲小部件)。所以我的問題是:哪些工具包可以生成上面列出的真正的本機UI控件,並在上面列出的三個MSWin版本上正確顯示?

我已經將它們中的每一個+「windows」輸入到Google Images中,但很難說,除了FLTK可能無法做到。你們中的許多人必須知道你的頭頂上的答案......

+7

wxWidgets使用本地GUI控件。 – cdoubleplusgood

+4

Qt還使用原生的GUI控件 – g19fanatic

+9

「Qt使用本地** **圖形API來渲染本地外觀界面元素等,但它仍然沒有實際使用的本地控制自己。這意味着它們保證了原生的外觀,而不是行爲。「 (從[wiki.wxwidgets.org](http://wiki.wxwidgets.org/Talk:WxWidgets_Compared_To_Other_Toolkits#Qt_uses_native_widgets_now)) – waldyrious

回答

21

我走路談論FLTK,因爲我不知道它。

  • wxWidgets的(在Windows上,可可在Mac OS X GTK Linux上,MFC )使用該平臺的原生工具包。
  • GTK使用主題API來僞造平臺的外觀(GTK2上的自定義主題引擎,GTK3基於CSS的引擎)。
  • Qt使用styles來僞造平臺的外觀和感覺。

wxWidgets的API是從我自己的經驗相當難看,因爲它剛剛上提供太多的方法,一種或另一種平臺製作的東西不可移植的,除非你變通辦法。與GTK +和Qt不同的是,它還在它作爲後端使用的工具包之上添加了自己的錯誤層。然而,它使用本地工具包努力讓平臺的本地外觀。

GTK + 3在Windows上仍然存在一些不足之處,自GTK + 3.6以來它正式支持GTK + 3。 GTK +項目委託MSYS2項目分發Windows二進制文件。由於您已經在使用MinGW,這幾乎是一種類似的環境。它們與GTKmm具有良好的C++綁定。但是,您可能需要做一些工作才能使您的Windows版本適合主題。

Qt是跨平臺的C++與主要目標是開發Windows一個不錯的選擇,試圖模仿的本機的外觀和感覺的平臺,但has its own theming limitations too.

綜上所述,只有2個approches:

  • 工具包提供自己的小部件,並嘗試通過提供主題化(GTK +和Qt)
  • 工具包是使用原生窗口部件,但隱藏自己的API背後的一個抽象層,看起來像本地平臺(wxWidgets的)

兩者都有自己的優點和缺點。

+0

我最初以爲我會去wxWidgets,因爲僞裝的方法經常會弄錯它,這會讓用戶癢癢。而且,這不是面向未來的;考慮可插拔的主題,你不能僞造它們。但是,然後這個答案http://stackoverflow.com/a/5800101/1143274讓我相信我必須堅持純粹的WinAPI,因爲我的應用程序在啓動延遲方面必須快速。我足夠的搜索,以確認沒有一個輕量級的庫,爲我做WinAPI的默認初始化和宏,所以我必須自己做。 –

+4

wxWidgets在使用本機用戶界面時如何「非常難看」?使用wx開發的應用程序與使用平臺標準工具包開發的應用程序無法區分。 – NuSkooler

+9

我在談論wxWidgets API,而不是外觀和感覺。 – liberforce

21

實現細節不談,wxWidgets的理念是,和一直以來,作爲本地地看。我們wxWidgets開發人員並不總是實現從本地應用程序無法區分的目標,但我們一直在努力做到這一點。據我所知,這不是Qt的這樣一個重要的目標,絕對不是GTK +,所以在我的(顯然是偏頗)看法,wxWidgets的是您最好的選擇,如果你是認真的爲使用者提供最佳的使用體驗,尤其是在OS X.

爲了更準確地回答你的問題,你在上面列出一切使用wxWidgets的爲Windows本地控件(富文本控件不可用本機下的其他平臺雖然)來實現。

+2

wxWidgets wiki與其他各種工具包有着不錯的(誠實而全面的)[比較](http://wiki.wxwidgets.org/WxWidgets_Compared_To_Other_Toolkits)。有一個有趣的地方在於,通過使用本地綁定而不是模擬本機外觀,wxWidgets應用更有可能看起來,行爲和感覺本地化,但是這樣做的負面影響是它們更可能呈現依賴於平臺的行爲或者明確特定於平臺的錯誤。 – waldyrious

+4

wxWidgets wiki(來自討論頁面)比較的另一個好處是:「Qt使用本機**圖形API API呈現本機界面元素等,但它實際上並不使用本機控件這意味着它們確保本機外觀,而不是行爲,Qt中的控件可能看起來是本地的,但操作系統並不認爲它們是它們,因爲它們本身並不是本地控件,因此,在屏幕閱讀器等可訪問性工具中,並不總是能夠正確地(或完全)使用Qt應用程序。「 – waldyrious

3

IUP - 便攜式用戶界面庫使用原生小部件,C API和Lua綁定。

+0

您能否在您的答案中包含官方頁面的鏈接?謝謝 :) – Roberto

1

我在不改變代碼的情況下使用java原生跨平臺,只使用c/C++ wxwidgets進行跨平臺操作,如果您想要使用c/C++ winapi for windows和x11 for gnu linux本地平臺和終端控制檯,如果你想讓你的軟件保持最新狀態,可以使用python作爲腳本控制檯和平臺,並且使用匯編語言來製作一個簡單的純粹的控制檯。有時我將它們與Windows上的共享庫.dll和gnu linux上的.so都結合在一起。我喜歡在做小規模硬件要求的編程研究時做比較性能。