很多人似乎都認爲哪個更好。我並沒有真正要求這些意見,我想知道的是細節:什麼使一個圖形工具包與另一個不同,以及Qt和Gtk +具有哪些差異?Gtk +和Qt有什麼區別?
回答
我不能直接對Gtk +說話,但在我以前的工作中,我使用了Gtkmm,在我目前的工作中我使用Qt。兩者都是C++,所以在這方面它們是一致的,但是Gtkmm是/僅僅是Gtk +代碼的包裝,它是直接C的。
當我切換作業時,我記得其中一個主要區別在Ui代碼中,這兩個工具包是如何處理佈局的。有些部分我認爲Gtk表現更好,有些我認爲Qt表現更好。兩者都可以讓你最終在你想要的地方得到你的小部件。
使用Gtkmm進行調試有點痛苦,因爲除了保存指向結構體的指針並調用Gtk +函數外,類通常不會做任何事情。額外的間接水平可能令人討厭。
Qt有更多的輔助代碼,可以在各種設置中使用,至少與我正在使用的Gtkmm版本相比。當你需要爲你的程序添加一個新的維度時,所有的東西都可以讓線程,進程間通信和聯網變得更加容易。他們也有它們的容器,如果你想使用它們,我認爲它們比STL容器有一個更好的界面 - 但它們最終會做同樣的事情,所以這是一個小優勢。
Gtkmm和Qt之間的信號/插槽機制是不同的。 Qt依靠編譯過程中的額外步驟來生成元信息,它用於信號/插槽。使用信號或槽的對象必須從QObject繼承,並且QObject繼承必須是第一個,沒有菱形結構。例如,這使得難以定義發出信號的抽象接口。另一方面,它們本質上意識到線程問題,並在必要時將信號/插槽連接轉換爲基於事件的連接。 Gtkmm使用SigC信號,這是直接的C++類,對我來說似乎在更廣泛的情況下很有用。另外,我記得,只有建立連接的對象需要從魔法基類繼承。另外,由於插槽是對象,因此您可以將它們用作非常好的可調函數對象。
我確定還有其他的區別,但這就是我現在記得的。記住我在Gtkmm的最後一次使用經歷是在3年前,所以其中一些項目可能已經改變了。
首先,您可以使用C中的Gtk +。Qt僅適用於C++。
此外,Gtk +應用程序傾向於使用關閉按鈕持續改變對話框。 Qt往往是沿着確定/應用/取消。不過,我不知道這在工具包級別有多少。至於編程方面,我不知道Gtk使用的是什麼回調機制,但是Qt的信號槽機制絕對是搖擺不定的。
要了解差異,最好了解歷史。
QT是作爲一個用戶界面開發的,並且在開始開發KDE時就有一些許可問題。 KDE選擇了QT,因爲當時沒有太多的選擇(Motif,Tcl/Tk等等)
GIMP開始開發,當時Window Toolkits沒有達到什麼樣的標準開發人員需要他們開始編寫Gimp工具包(GTK)。經過一段時間後,決定重新編寫GTK並使其成爲面向對象(GTK +)。
同樣在這個時候,由於QT的潛在授權問題,Gnome開始並決定使用GTK +庫。
現在,如果您查看維基百科上的QT Design和GTK Design條目,您可以開始看到系統之間的一些差異。
注意,QT是作爲稱爲:
跨平臺應用開發框架
而GTK +被稱爲:
跨平臺小部件工具包用於創建圖形用戶界面。
如果這些條目是相信的話,那麼我認爲這就是我們兩個人之間的主要區別,但我認爲它在今天的世界中是一條相當精細的路線。
這並不是真正的區別。它僅僅意味着GTK使用單獨的庫(glib,GObject等)完成基本功能,而Qt擁有QtCore中的所有功能。 QtGui與GTK的對比更密切。 – 2009-11-26 03:01:40
另一個歷史問題是,在考慮跨平臺能力時,這是從Qt的第一個源代碼中考慮的,因爲GTK從一開始就被設計爲X11工具包,然後被擴展到像稍後跨平臺。爲不同的事情設立多個庫可以使跨平臺成爲一個謎題,爲什麼Qt是我的首選。 – e8johan 2009-11-27 10:18:35
- 1. GTK#和Windows Forms有什麼區別?
- 2. QT-Embedded和QTopia有什麼區別?
- 3. Qt中logicalDpiX和physicalDpiX有什麼區別?
- 4. GTK +和GTK#有什麼區別,哪一個是「更多平臺」?
- 5. 諾基亞Qt SDK和Qt SDK有什麼區別?
- 6. Qt調試版本和Qt發佈版本有什麼區別?
- 7. Qt Creator版本有什麼區別?
- 8. 在Gtk中,TreePath和TreeIter有什麼區別?
- 9. C中的GTK和Win32 Native API有什麼區別?
- 10. GTK主題和窗飾主題有什麼區別?
- 11. 有什麼區別`和$(Bash中有什麼區別?
- 12. 有什麼區別? :和||
- 13. &&和||有什麼區別?
- 14. 「/」和「/ *」有什麼區別?
- 15. 有什麼區別:。!和:r!?
- 16. ==和===有什麼區別?
- 17. Appender和〜有什麼區別?
- 18. $ @和$ *有什麼區別?
- 19. is和=有什麼區別?
- 20. #.00和#。##有什麼區別?
- 21. `==`和`is`有什麼區別?
- 22. '=='和'==='有什麼區別?
- 23. /和/#/有什麼區別?
- 24. | 0和~~有什麼區別?
- 25. `&`和`ref`有什麼區別?
- 26. ==和===有什麼區別?
- 27. ==和===有什麼區別?
- 28. `{}`和`[]`有什麼區別?
- 29. JavaScript和=== ===有什麼區別?
- 30. difftime和' - '有什麼區別?
我以前聽說過(Qt只是C++),但我不太明白它的含義。我可以在C#,Python等中使用Gtk +。我知道你至少可以在Python中使用Qt。這是什麼意思,Qt只是C++? – 2009-11-26 01:58:33
@Matthew:它只是意味着你不能和C一起使用它。然而,你可以綁定到任何更高級的語言(Python,Ruby,不管)。 – 2009-11-26 02:18:15
「自動設置保存」與「確定,應用,取消」實際上更像是Gnome而不是KDE。這兩個工具包都可以處理。 – 2009-11-26 11:06:07