ฉันควรเลือกอะไร: GTK + หรือ Qt? [ปิด]


89

ใครช่วยแนะนำสิ่งที่ดีที่สุดสำหรับห้องสมุดเหล่านี้ในปัจจุบัน เป็นเพียง GUI หรือมีฐานข้อมูล XML ระบบเครือข่ายเธรดและอื่น ๆ รองรับด้วยหรือไม่?

ฉันกำลังอ่านเกี่ยวกับพวกเขาและคิดว่าจะเริ่มเรียนรู้ / ใช้หนึ่งในนั้น

ที่พบมากที่สุดคืออะไร? อะไรคือความแตกต่างระหว่างพวกเขา? ทำไมคุณถึงเลือกอย่างใดอย่างหนึ่ง?


20
ในขั้นต้นมีข้อโต้แย้งมากมายเกี่ยวกับรูปแบบการให้สิทธิ์ใช้งาน Qt ที่เป็น GPL เต็มรูปแบบหรือเชิงพาณิชย์ในขณะที่ GTK + เป็น LGPL (ดังนั้นจึงใช้งานร่วมกับผลิตภัณฑ์ปิดได้ง่ายกว่า) แต่ตอนนี้ Qt มีให้บริการในรูปแบบ LGPL IIRC ดังนั้นจึงไม่ใช่เหตุผลที่แท้จริงอีกต่อไปที่จะเลือกอย่างใดอย่างหนึ่ง
Roalt

3
คุณอาจดูคำถามที่เกี่ยวข้องเป็นส่วนใหญ่: stackoverflow.com/questions/1801074/…
Caleb Huitt - cjhuitt

4
และอีกครั้งคำถามที่ดีปิดใน stackoverflow ฉันต้องการเพิ่มว่าหากคุณต้องการวิดเจ็ต HTML แบบบูรณาการที่ดีคุณต้องใช้ GTK ทันที (หลังจาก QT 5.2 ย้ายไปยังชุดคุณลักษณะที่ลดลงอย่างมาก / ไม่สามารถใช้งานได้) หรือใช้ QT และฝัง Chrome CEF ซึ่งเป็นการเพิ่มสิ่งต่างๆมากมายความซับซ้อนและ 20MB ไปยังแอปของคุณ
Lothar

คำตอบ:


96

ตามที่คุณดูเหมือนจะกำหนดเป้าหมายเป็น Linux เป็นหลักดังนั้นตัวเลือกส่วนใหญ่ขึ้นอยู่กับภาษาโปรแกรมที่คุณต้องการใช้

หากคุณเขียนโค้ดใน C ให้ไปที่ GTK +

หากคุณเขียนโค้ดใน C ++ ให้ไปที่ Qt มิฉะนั้นคุณจะต้องใช้Gtkmm (กระดาษห่อ C ++ บน GTK +)

หากคุณเขียนโค้ดใน Python ทั้ง GTK + และ Qt จะมีการเชื่อมโยงสำหรับภาษา: ดูPyGtk , PyQtและPySide (ซึ่ง Nokia เปิดตัวเอง)

หากคุณเขียนโค้ดใน Java Qt จะไม่ใช่ตัวเลือกที่ใช้งานได้อีกต่อไปเนื่องจากNokia ยกเลิก Qt Jambi (การผูก Java สำหรับ Qt)

นอกจากนี้น่ารักมากขึ้นบนรอยเกี่ยวกับ scenegraph ของQGraphicsScene API เครื่องยนต์สคริปต์ตัวมากกว่าจาวาสคริแกน (คน WebKit เครื่องยนต์เปิดเครื่อง) เครื่องรัฐและกรอบภาพเคลื่อนไหวและUI ที่เปิดเผย

GTK + ไม่ได้นำเสนอมากนักแม้ว่าคุณจะสามารถใช้Clutterควบคู่ไปด้วยได้

หากคุณกำลังมองเฉพาะลงใน DB, XML (ดี + มี parser สำหรับย่อยของ XML) และเกลียว (ดี + มีGLib ) คุณสมบัติแล้ว Qt จะนำเสนอทุกสิ่งที่อยู่ในQtSQl , QtXmlและQtConcurrent

สรุปแล้วฉันจะบอกว่า Qt เป็นตัวเลือกที่แน่นอน แต่ GTK + ก็มีความสามารถมากเช่นกัน

ฉันไม่แน่ใจว่าคุณจะได้รับคำตอบที่ชัดเจนสำหรับคำถามของคุณซึ่งอธิบายได้ว่าทำไมบางคนถึงเลือกใช้ Gnome มากกว่า KDE หรือในทางกลับกัน เลือกสิ่งที่ดีที่สุดสำหรับคุณ

PS: ฉันวางแผนที่จะกำหนดเป้าหมาย Symbian จากนั้นไปที่ Qt

แก้ไข: สิ่งที่ยอดเยี่ยมสำหรับ Qt คือQtWebView: นำ Chromium เข้าสู่แอปพลิเคชัน Qt ของคุณเพื่อแสดงเนื้อหาเว็บ คนอื่น ๆ กำลังฝังเนื้อหาเว็บไว้ในแอปพลิเคชันของตนโดยใช้ตัวอย่างเช่น Awesomium หรือ Berkelium


อย่าลืมว่า QtScript ขับเคลื่อนโดย JavaScriptCore ซึ่งปัจจุบันเป็นเอ็นจิ้น JavaScript ที่เร็วที่สุดด้วย SquirrelFish Extreme
CMircea

1
เกี่ยวกับการแก้ไขของคุณมี WebKitGtk + สำหรับ GTK + ฉันไม่คิดว่า QtWebKit มีคุณสมบัติเป็นข้อได้เปรียบเหนือ GTK +
Matthew

ถ้ารหัสคุณในทับทิมมองหาQtRuby
José Andias

5
gtkmmเป็นสิ่งที่ยอดเยี่ยมพลังทั้งหมดของ GTK + แต่ใช้C ++ จริงตามคำจำกัดความที่ทันสมัยทำให้เกิดรหัส GUI ที่สะอาดและอ่านได้มากที่สุดที่ฉันเคยเห็น ... จริงๆแล้วเป็นสิ่งที่สามารถรับได้มากที่สุดเพราะเมื่อฉันเริ่มพยายามเรียนรู้การเขียนโปรแกรม GUI ครั้งแรก มันเป็นความเรียบร้อยของgtkmmสิ่งนั้นที่ทำให้ความตั้งใจของฉันกลับคืนมา โชคดีที่ความพากเพียรจ่ายออกไปและฉันพบว่ามันทรงพลังมากและทำให้ฉันได้รับ C ++ 14 มากกว่า C ++ 03 นอกจากนี้ยังได้รับการดูแลเป็นอย่างดีโดยผู้ดูแลหลักคนเดียวกันมานานกว่าทศวรรษ AFAICT ฉันเป็นแค่แฟนไม่มีสังกัด ฯลฯ
underscore_d

3
Oh ... the Symbian days ...
daka

41

ฉันเคยใช้ GTK +, QT และ wxWidgets มาก่อน สรุปสั้น ๆ มีดังนี้

สำหรับโครงการ UI ข้ามแพลตฟอร์มครั้งแรกของฉันฉันตัดสินใจที่จะใช้ wxWidgets เป็นหลักเนื่องจากในขณะนั้นใบอนุญาตไม่ได้มีข้อ จำกัด เท่าของ QT (QT คือ GPL และสำหรับ Linux เท่านั้น) และมี UI เฉพาะแพลตฟอร์ม (ไม่เหมือน GTK) โครงการทำงานได้ดี แต่มีข้อบกพร่องเล็กน้อยที่ทำให้สามารถรวบรวมและทำงานได้อย่างถูกต้องในแพลตฟอร์มอื่น - บางครั้งเหตุการณ์บางอย่างก็แตกต่างกันไป GDI ใน wxWidgets ก็ค่อนข้างช้า

ต่อไปฉันใช้ GTK สำหรับโครงการอื่นใน python สำหรับสิ่งนี้ฉันใช้การผูก python และทุกอย่างทำงานได้อย่างราบรื่นไม่มากก็น้อย ฉันไม่ชอบความจริงที่ว่า UI ไม่ได้ดูเนทีฟบน Windows และ Mac และเมื่อคุณเปิดแอพ GTK + มันจะดีบักเอาท์พุทคำเตือนที่สำคัญซึ่งดูเหมือนจะไม่สนใจ : ส

ในที่สุดฉันก็ทำโครงการ QT ที่เรียบง่ายมากตอนนี้ที่ Nokia ได้มาและก็ยอดเยี่ยม ที่ดีที่สุดในสาม ก่อนอื่นถ้าคุณไม่ใช่นักเรียนเก่าที่ชอบ VI หรือ Emacs QtCreator ก็ยอดเยี่ยม ฉันรัก VI มากและใช้มันมาหลายปีแล้ว แต่ฉันชอบ QtCreator สำหรับโครงการ C ++ QT มากกว่า เกี่ยวกับไลบรารีฉันชอบเอกสารและ API ที่ให้มามาก QT มีแนวคิดเกี่ยวกับสล็อตและสัญญาณซึ่งแนะนำคำหลัก C ++ ใหม่และตัวประมวลผลล่วงหน้า โดยทั่วไปหลังจากอ่านบทช่วยสอนคุณจะเข้าใจได้ง่ายและจะเริ่มรักมัน ตอนนี้ฉันกำลังทำ iPhone dev และรู้สึกเหมือนกระบวนทัศน์ UI ของ Cocoa / Interface Builder

สรุป: ฉันจะใช้ QT ลงมือทำ ใบอนุญาตค่อนข้างดีและ SDK และเอกสารก็ดีจริงๆ


13
ฉันคิดว่าเป็นเรื่องดีที่แอปพลิเคชัน GTK + มีลักษณะเหมือนกันบนแพลตฟอร์มที่แตกต่างกันเนื่องจากหมายความว่าฉันไม่ต้องเสียเวลาเพิ่มอีกหลายสัปดาห์เพื่อหาวิธีทำให้ UI ของฉันจัดเรียงตัวเองให้เหมาะสมกับชุดเครื่องมือเนทีฟแต่ละชุด นอกจากนี้ - when you launch a GTK+ app it always debug outputs loads of CRITICAL warnings which seem fine to ignore. :S- ไม่มันไม่ได้เว้นแต่คุณจะทำอะไรผิดพลาดซึ่งไม่เป็นไร ฉันไม่เคยเห็นคำเตือนที่สำคัญที่ไม่ได้มาจากโอ๊ะโอของฉันเองและไม่ใช่เรื่องง่ายที่จะแก้ไขโดยใช้รหัสที่ถูกต้อง และฉันไม่ได้รับข้อความดีบักไม่มีแม้แต่คำเตือน
underscore_d

25

ฉันไม่เคยใช้ GTK แต่จากประสบการณ์ส่วนตัวของฉันในการใช้ Qt:

มันเป็นมากกว่า GUI ธรรมดา ๆ เป็นกรอบการใช้งานทั้งหมด ฉันเคยคิดว่ามันเป็นไลบรารี Java สำหรับ C ++ มีทุกสิ่งที่คุณกล่าวถึงไม่ว่าจะเป็นฐานข้อมูล XML ระบบเครือข่ายและเธรดและอื่น ๆ นอกจากนี้ยังมีสิ่งต่างๆเช่นคอนเทนเนอร์และตัววนซ้ำและเป็นคู่ของไลบรารีเพิ่มจำนวนมาก

สิ่งที่ทำให้ฉันประทับใจมากที่สุดเมื่อเริ่มใช้ Qt คือเอกสารที่กว้างขวางมาก คุณจะได้รับโปรแกรมที่เรียกว่า Qt Assistant ซึ่งจัดเตรียมเอกสาร API ที่จัดทำดัชนีและค้นหาได้บนเดสก์ท็อปของคุณตลอดจนตัวอย่างโค้ดและบทช่วยสอนมากมาย ฉันพบว่ามันสร้างความแตกต่างอย่างมากในการค้นหาข้อมูล API ในเว็บทุกครั้ง เข้าถึงได้รวดเร็วมากเมื่อคุณต้องจำลายเซ็นของวิธีการ

ฉันไม่แน่ใจว่าสิ่งไหนที่พบบ่อยที่สุด นั่นคงยากที่จะวัดได้อย่างแม่นยำ พวกเขาทั้งสองได้รับความนิยมอย่างแน่นอน เนื่องจาก Gnome เป็นเดสก์ท็อปเริ่มต้นของ Ubuntu และ Gnome อยู่ด้านบนของ GTK จึงเห็นได้ชัดว่ามีการใช้งานอย่างแพร่หลาย แน่นอนว่า KDE ได้รับความนิยมมากเช่นกัน Nokia กำลังผลักดัน Qt อย่างมากในพื้นที่มือถือ - Maemo OS ของพวกเขาที่ใช้ใน N900 ใหม่เช่นในไม่ช้าจะเปลี่ยนไปใช้ Qt เป็นชุดเครื่องมือเริ่มต้น (ปัจจุบันคือ GTK) ฉันเชื่อว่า Qt จะกลายเป็นชุดเครื่องมือเริ่มต้นในไม่ช้า สำหรับ Symbian OS

ฉันไม่ได้ใช้ Qt Creator แต่ฉันได้ยินสิ่งดีๆมากมายเกี่ยวกับมัน เป็น C ++ IDE ที่มีการผสานรวมกับ Qt อย่างชัดเจน นอกจากนี้ยังมีการจำลองเป็นกลุ่มปลอมซึ่งเป็นสิ่งที่ดีเสมอหากคุณชอบสิ่งนั้น!

Qt ใช้ qmake สำหรับสร้างคอนฟิกูเรชัน ฉันพบว่าสิ่งนี้ดีกว่าการเขียน makefiles ของคุณเอง ไม่ทราบว่า GTK ใช้สร้างอะไร

สองสิ่งที่ฉันพบว่ามีการชดเชยเล็กน้อยกับ Qt ในตอนแรกคือการใช้มาโครตัวประมวลผลล่วงหน้าจำนวนมาก ระบบสัญญาณ / สล็อตเป็นกลไกที่ดีสำหรับการส่งผ่านเหตุการณ์ / ข้อความในแอปพลิเคชันของคุณ แต่มันรู้สึกเหมือนมีเวทมนตร์ที่อาจไม่สามารถพกพาไปยังชุดเครื่องมืออื่นได้อย่างง่ายดายหากคุณต้องการ นอกจากนี้ moc (คอมไพเลอร์เมตาวัตถุ) ในขณะที่ฉันไม่แน่ใจว่ามันทำอะไร แต่ก็รู้สึกเหมือนมีเวทมนตร์อยู่เบื้องหลังมากเกินไป

โดยรวมแล้วฉันอยากจะแนะนำ Qt โดยเฉพาะอย่างยิ่งถ้าคุณกำลังเรียนรู้ มีเอกสารที่น่าทึ่งมากและ IDE ที่ดีและฟอรัมที่วุ่นวาย คุณจะสามารถสร้างแอป C ++ ได้อย่างรวดเร็วโดยเฉพาะกับ QML ที่มาใน 4.7


9

มันอาจขึ้นอยู่กับสิ่งที่คุณต้องการทำ ฉันอยากจะแนะนำ Qt เพราะมันเป็นมากกว่า GUI แต่ก็มีการผูก Python ที่ดี (Gtk ก็เช่นกัน) และไลบรารี GUI เองก็ (พูดตามอัตวิสัย) แล้ว Gtk

ในทางกลับกัน Gtk นั้นมีอยู่ทั่วไปในโลกของ linux ดังนั้นคุณอาจได้รับความช่วยเหลือเพิ่มเติมบนเว็บ เหตุผลในการแพร่หลายของ Gtk อาจเกี่ยวข้องกับ Gnome และ Ubuntu มากกว่าข้อดีทางเทคนิค แต่ถ้าคุณต้องการให้ซอฟต์แวร์ของคุณผสมผสานเข้ากับสองสิ่งนี้ได้ดีคุณจะทำสิ่งนั้นได้ง่ายขึ้นด้วย Gtk


7

Qt แน่นอนว่ามีฐานข้อมูลที่มั่นคงเครือข่ายการสนับสนุนเธรด ฯลฯ ... มันทำมากกว่านั้นเพียงแค่ GUI ข้ามแพลตฟอร์ม (และส่วนใหญ่ค่อนข้างดี)

ฉันขอแนะนำมากกว่า GTK +


3

เพียงแค่เพิ่มข้อดีของ QT ให้กับคำตอบอื่น ๆ .. QT มีเอกสารที่ยอดเยี่ยมผู้สร้าง IDE และ GUIของตัวเองและปรับปรุง C ++ ด้วยแนวคิดใหม่ ๆ เช่นสล็อต / สัญญาณ (โดยทั่วไปคือเหตุการณ์)

ฉันไม่ใช่นักพัฒนา GTK ดังนั้นฉันจึงไม่สามารถเปรียบเทียบกับโลก GTK ได้ :(


11
สำหรับ Gtk ยังมีผู้สร้าง GUI Glade ( glade.gnome.org )
davidbe

3

Qt. ไม่ใช่แค่เชิงวัตถุ แต่เป็นเชิงวัตถุที่ "ดี" มันขึ้นอยู่กับ "ชุดย่อย" ของ C ++ ที่ไม่อาศัยความคลุมเครือของ C ++ (แต่คุณได้รับอนุญาตให้ยึดติดกับพวกเขาหากคุณชอบมาโซคิสม์;))

มีโมเมนตัมที่แข็งแกร่งในตอนนี้ที่ Nokia ซื้อมา (จริงๆแล้ว Nokia ทำได้ประมาณ 2-3 ปีที่แล้ว) จะอยู่ในโทรศัพท์มือถือ Nokia และ Intel ทั้งหมด (สมาร์ทโฟนเน็ตบุ๊กแท็บเล็ต)

มันเป็นกระดูกสันหลังของ KDE ดังนั้นจึงเป็นผู้ใหญ่มาก แต่ได้รับการออกแบบมาอย่างยืดหยุ่นมากซึ่งทำให้สามารถรองรับ TODAY "สิ่งดีๆ" ล่าสุดทั้งหมดที่เฟรมเวิร์กGUIควรมีมากกว่าเดิม

ไปเลย


5
ชุดย่อย? เหมือน superset พิจารณา qmake และ moc
rr-


1

หากคุณต้องการให้แอปของคุณทำงานบน iOS, Android, Blackberry, แพลตฟอร์มมือถืออื่น ๆ , Windows, Mac OSX และ Linux ให้ใช้ Qt

qt-project.org

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.