การเรียนรู้ C ++ ผ่าน Qt Framework จริง ๆ การเรียนรู้ C ++ [ปิด]


32

ปัญหาที่ฉันมีคือหนังสือ C ++ ส่วนใหญ่ที่ฉันอ่านใช้เวลาเกือบตลอดไปในเรื่องของไวยากรณ์และพื้นฐานของภาษาเช่นforลูปwhile, อาร์เรย์, รายการ, ตัวชี้ ฯลฯ

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

จากนั้นฉันก็สะดุดกับQTซึ่งเป็นห้องสมุดที่น่าทึ่ง!

แต่ทำงานผ่านการสาธิตที่พวกเขามีดูเหมือนว่าตอนนี้ฉันอยู่ในภาวะที่กลืนไม่เข้าคายไม่ออก ฉันรู้สึกเหมือนลูกชายของเศรษฐีขับรถรอบในรถสปอร์ตที่ได้รับเงินอุดหนุนจากพ่อ เช่นฉันสามารถสร้างซอฟต์แวร์ที่ยอดเยี่ยม แต่ไม่มีเงื่อนงำสิ่งที่เกิดขึ้นภายใต้ประทุน

ตัวอย่างของภาวะที่กลืนไม่เข้าคายไม่ออกของฉันใช้งานในการสร้างเว็บเบราว์เซอร์ที่เรียบง่าย ใน C ++ บริสุทธิ์ฉันไม่รู้ด้วยซ้ำว่าจะเริ่มต้นยังไงกับไลบรารี่ Qt ที่สามารถทำได้ภายในโค้ดไม่กี่บรรทัด

ฉันไม่ได้บ่นเกี่ยวกับเรื่องนี้ ฉันแค่สงสัยว่าจะเติมความรู้ที่ว่างเปล่าระหว่างโครงสร้างพื้นฐานของภาษาและอินเทอร์เฟซระดับสูงที่กรอบ Qt ให้ได้อย่างไร


ฉันไม่คุ้นเคยกับการเขียนโปรแกรมใน Qt จริง ๆ แล้วมันแนะนำไวยากรณ์ใหม่หรือเปลี่ยนภาษาหรือเป็นเพียงบางไลบรารีที่ซับซ้อนมาก?
FrustratedWithFormsDesigner

@FrustratedWithFormsDesigner มันไม่ QT เป็น GUI กรอบqt.nokia.comหากคุณสนใจ
Karlson

Qt ยังเสนอทางเลือกให้กับคลาสมาตรฐานและตู้คอนเทนเนอร์ (เช่น QString, QList และอื่น ๆ ) และสิ่งอำนวยความสะดวกอื่น ๆ มากมาย ฉันพบว่าบางคนใช้งานง่ายกว่าที่เป็นมาตรฐาน ฉันคิดว่ามันเป็นสภาพแวดล้อมการเขียนโปรแกรมที่ดี แต่ฉันขอแนะนำให้เรียนรู้ภาษา C ++ หลักแยกกัน
จอร์โจ

3
หากคุณต้องการเรียนรู้วิธีการใช้ Qt เพียงดาวน์โหลดและดูซอร์สโค้ดของมัน
user16764

1
@Karlson Qt เพิ่มบางสิ่งในภาษาดังนั้นความต้องการคอมไพเลอร์ moc aka metaobject สิ่งนี้เป็นการเพิ่มการสะท้อนบางอย่างและก่อให้เกิดพื้นฐานของระบบสัญญาณ / ช่องของ Qt
Tamás Szelei

คำตอบ:


11

คุณต้องการที่จะรู้ว่าการเหยียบคันเร่งทำให้รถวิ่งเร็วขึ้นหรือคุณแค่แคร์ว่าการเหยียบคันเร่งจะทำให้รถวิ่งได้เร็วขึ้นหรือไม่?

คุณเห็นประโยชน์ของการเขียนโปรแกรมกล่องดำซึ่งเป็นวิธีที่ดีในการออกแบบระบบเมื่อกล่องทั้งหมดทำงาน บางคนต้องทำกล่องดำและถ้าคุณต้องการที่จะเป็นผู้ชาย / ผู้หญิงนั้นคุณต้องรู้เพิ่มเติมเกี่ยวกับภาษามากกว่าผู้ชายที่ใช้กล่อง

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


2
"IMO คุณจะต้องทำตัวให้เป็นความเสียหายแม้ว่าคุณจะไม่ได้ใช้ความพยายามที่จะกำจัดสิ่งที่เป็นนามธรรม QT ให้คุณได้ในที่สุด" สิทธิ์ของคุณและความรู้สึกนั้นเป็นสิ่งที่ฉันมี
user866190

18

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

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


3
เห็นด้วย - Qt ใช้ชุดเครื่องมือที่แตกต่างกันโดยสิ้นเชิงกับมาตรฐาน C ++
DeadMG

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

9
ฉันใช้คอนเทนเนอร์มาตรฐานและอัลกอริทึมภายในโมเดลวิศวกรรมของฉัน - นั่นคือตรรกะทางธุรกิจของฉัน ฉันใช้ตู้คอนเทนเนอร์ Qt ภายในรหัส GUI ของฉัน วิธีนี้แบบจำลองทางวิศวกรรมของฉันได้รับการปกป้องจากการเปลี่ยนแปลงใน Qt และในทางกลับกัน Qt มีวิธีการเชื่อมต่อคอนเทนเนอร์มาตรฐานและคอนเทนเนอร์
emsr

2
ฉันไม่แคร์เรื่องตู้คอนเทนเนอร์มากนัก พวกเขาไม่ได้เป็นส่วนที่มีประโยชน์ที่สุดของ STL; อัลกอริทึมสำคัญกว่ามาก เนื่องจากการออกแบบของ STL อัลกอริธึมสามารถทำงานกับคอนเทนเนอร์อื่นได้ง่ายและคอนเทนเนอร์ Qt ได้รับการออกแบบให้ทำงานกับอัลกอริธึม STL Win-win จริงๆ
MSalters

12

เมื่อพิจารณาว่า Qt มี meta-compiler ของตัวเองที่คุณต้องประมวลผลไฟล์ต้นฉบับด้วยก็ยากที่จะพิจารณาว่า Qt code เป็น "just C ++"

แต่ที่สำคัญกว่านั้นรูปแบบของ C ++ ที่ Qt ใช้และให้กำลังใจคือสิ่งที่เราเห็นได้เมื่อประมาณปี 2538

จริงๆแล้วมันเป็นความพยายามที่ทำให้ C ++ เหมือน Java มากที่สุด มันคิดถึงออกในหรือทาให้ทุกสิ่งที่น่าตื่นตาตื่นใจที่จริงให้ c ++ มูลค่าการใช้ในวันนี้ แต่คุณถูกล็อคไว้ในเซตย่อยซึ่งส่วนใหญ่รู้สึกเหมือนเป็นจาวาที่ด้อยกว่า

ดังนั้นหากเป้าหมายคือการเรียนรู้ C ++ ฉันจะบอกว่าไม่อยู่ให้ห่างจาก Qt บางทีลองดูที่ Boost แทนหากคุณต้องการใช้ไลบรารีที่กำหนดเป็นจุดเริ่มต้น Boost ส่งเสริมการปฏิบัติที่มีการพิจารณาที่ดีในวันนี้

แต่ถ้าหากคุณต้องการเรียนรู้ภาษา C ++ให้เลือกหนังสือเรียนที่ดีและมุ่งเน้นไปที่ภาษานั้น

การเขียนเว็บเบราว์เซอร์ไม่ว่าคุณจะทำอะไรมันจะสอนคุณเกี่ยวกับเว็บเบราว์เซอร์อย่างดีที่สุด มันจะไม่สอนคุณมากเกี่ยวกับภาษาที่คุณใช้

C ++ เป็นภาษาที่ไม่มีคลาส WebBrowser ในตัวถ้าคุณอ่านมาตรฐาน C ++ มันจะไม่พูดอะไรเกี่ยวกับเบราว์เซอร์ ไม่ได้พูดถึงแอปพลิเคชัน GUI

นั่นเป็นเพราะสิ่งเหล่านั้นถูกสร้างขึ้นด้านบนให้บริการโดยห้องสมุดเช่น Qt C ++ เหมือนกับภาษาการเขียนโปรแกรมใด ๆ เป็นเรื่องเกี่ยวกับตรรกะเกี่ยวกับวิธีการแสดงตรรกะ และใช่นั่นหมายถึงการทำงานกับอาร์เรย์และพอยน์เตอร์พอยเตอร์และลูปและทุกสิ่งเหล่านั้น

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

"ปรัชญาและพลังของภาษา" อยู่ในอาร์เรย์และรายการและลูปไม่ใช่ในเว็บเบราว์เซอร์


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

2
Heck, Qt ความต้องการของตัวเองเมตาดาต้าคอมไพเลอร์ของตนเพียงเพื่อให้รูปแบบของการเขียนโปรแกรมสามารถรับไว้ได้ นั่นไม่ได้บอกอะไรคุณใช่ไหม
jalf

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

3
@JimInTexas: มันมีมาก่อน C ++ ประเด็นของคุณ? ในช่วงกลางยุค 90 C ++ เป็นสัตว์ร้ายที่แตกต่างกันมาก มันใกล้เคียงกับสิ่งที่กลายเป็นชวาในที่สุดกว่าในปัจจุบัน
jalf

3
@JimInTexas: ใช่มันผิด แต่หวังว่ามันควรจะชัดเจนว่าฉันหมายถึงอะไร มันเป็นความพยายามที่จะบรรลุเป้าหมายการออกแบบของ Java ใน C ++ มันเป็นความพยายามในการใช้โมเดล OOP ที่มีข้อบกพร่องแบบเดียวกับที่ java ใช้
jalf

9

การเรียนรู้ C ++ ผ่าน Qt Framework จริง ๆ การเรียนรู้ C ++

อาจจะ.

ฉันต้องเห็นรหัสที่คุณใส่ในเครื่องมือจัดการเหตุการณ์ของคุณ

แม้ว่าจริง ๆ แล้วอย่ามัวเมากับคุณ "รู้" เราทุกคนใช้กรอบหน้าต่างและเราทุกคนยังคงเรียนรู้ เพียงเขียนโค้ด / อ่านสิ่งใหม่ ๆ และคุณจะได้เรียนรู้ C ++ ต่อไป การเรียนรู้กรอบหน้าต่างใหม่เป็นส่วนเสริมที่ยอดเยี่ยมสำหรับทักษะของคุณแม้ว่ามันอาจไม่ได้หมายความว่าคุณสามารถใช้เครือข่ายประสาทหรือ Quicksort ใน C ++


5

ไม่ต้องกังวล ในตอนแรกโค้ดส่วนใหญ่ของคุณจะใช้เฟรมเวิร์ก แต่หลังจากนั้นสักครู่คุณจะต้องขยายมันแม้ว่าเพียงเล็กน้อย จากนั้นคุณจะต้องใช้ C ++ มากขึ้น

นอกจากนี้โปรดจำไว้ว่าคุณมีแหล่งข้อมูล Qt ทั้งหมด IDE จะนำคุณไปสู่นิยามของฟังก์ชัน / วิธี / คลาสที่คุณต้องการอย่างมีความสุข ยิ่งคุณใช้งาน C ++ ได้ลึกเท่าไหร่

คนอื่น ๆ ได้พูดถึงความแตกต่างระหว่าง Qt C ++ และ C ++ มาตรฐาน ตกอยู่ในสองค่ายนี้:

  • ไลบรารีที่แตกต่าง: Qt รวมถึงคอนเทนเนอร์ตามปกติทั้งหมด: อาร์เรย์, รายการ, ชุด, แฮชแมป ฯลฯ พวกมันเข้ากันได้เป็นอย่างดีและมีการนำไปใช้งานที่ดี ยังอยู่ในเวอร์ชันล่าสุด (4.1 และใหม่กว่าฉันคิดว่า) พวกเขามี API 'คล้าย STD' นอกเหนือจากความหลากหลายแบบเก่า (และ API ที่เหมือน Java) ในที่สุดตัวเลือกการออกแบบ (เมื่อใช้อาร์เรย์เมื่อใดควรใช้ hashmap) เหมือนกันดังนั้นการเปลี่ยนเป็น STD สำหรับโครงการที่ไม่ใช่ QT นั้นไม่ยากนัก

  • mocการเพิ่มไวยากรณ์: ส่วนใหญ่สำหรับการจัดการสัญญาณ แต่ยังมีการสร้างห่วง nicer สองสาม ผู้คนจำนวนมากรู้สึกว่าเครื่องมือนี้หมายความว่าไม่ใช่ C ++ อีกต่อไป แต่ IMHO พวกเขารู้สึกเหมือนมาโครที่ฉลาดกว่าเล็กน้อย การจัดการสัญญาณคู่ที่ดีอย่างหลวม ๆ นั้นเป็นข้อได้เปรียบอย่างมากของกรอบการทำงานที่ดีและมันก็ยากที่จะทำในภาษาที่พิมพ์แบบคงที่ ใน C ++ ที่ทันสมัยสามารถทำได้ด้วยเทมเพลตจำนวนมาก แต่ก็ยังห่างไกลจากมาตรฐานเมื่อ Qt mocได้เป็นครั้งแรก ในที่สุดหากคุณต้องการทำโครงการที่ไม่ใช่ Qt ให้ตรวจสอบว่าคุณใช้เฟรมเวิร์กหรือไม่และมีสัญญาณหรือไม่ ถ้าใช่แล้วสิ่งที่คุณคุ้นเคยกับการใช้ Qt ส่วนใหญ่จะไม่มีผลเสียใด ๆ ในการเรียนรู้ Qt ก่อน


มีการปรับปรุงลูปอะไรบ้างmoc?
Basile Starynkevitch

@Basile Starynkevitch: บางทีเขาอาจหมายถึง foreach loop (ซึ่งฉันใช้อย่างหนัก) นี่คือการเพิ่มไวยากรณ์ แต่ ASAIK ไม่มีส่วนเกี่ยวข้องกับกระทรวงพาณิชย์ ดังนั้นคุณพูดถูกว่าบางทีคำตอบควรถูกกำหนดในวิธีที่ต่างออกไป
จอร์โจ

foreachเป็นเพียงแมโคร .... (จริงๆแล้วเป็น "นามแฝง" ที่Q_FOREACHกำหนดไว้ใน<Qt/qglobal.h>) ฉันไม่คิดว่าmocกำลังประมวลผลอยู่ และ C ++ 11 มีfor (auto it : container)โครงสร้าง!
Basile Starynkevitch

@Basile Starynkevitch: Qt น่าจะต้องมีการปรับแก้ลึกหากต้องย้ายไปที่ C ++ 11: Qt ได้รับการออกแบบสำหรับ C ++ (และพยายามเอาชนะข้อ จำกัด บางอย่าง) ดังนั้นจึงไม่จำเป็นต้องแก้ปัญหาด้วย C ++ 11
จอร์โจ

1
ฉันใช้ทั้ง Qt และ Boost มีการทับซ้อนกันมากระหว่างสองไลบรารี แต่ Qt นั้นง่ายต่อการเรียนรู้มาก
Jim In Texas

4

Qt ใช้กันอย่างแพร่หลายในโลกธุรกิจเนื่องจากมีชุดเครื่องมือข้ามแพลตฟอร์มที่สมบูรณ์และสภาพแวดล้อมการพัฒนารวมถึงห้องสมุด GUI ที่ดี

นอกจากนี้ยังรองรับความเป็นสากลอย่างเต็มที่รวมถึงเครื่องมือ 'นักภาษาศาสตร์ที่ยอดเยี่ยม'

หากคุณวางแผนอาชีพนักวิชาการฉันจะไม่สนใจกับ Qt ในทางกลับกันถ้าคุณชอบ C ++ และต้องการเรียนรู้ทักษะการตลาดแล้ว Qt ก็คุ้มค่าที่จะเรียนรู้

และใช่ Qt คือ C ++ และคุณสามารถผสมในมาตรฐานและเพิ่มไลบรารี่ให้กับเนื้อหาในใจถ้านั่นทำให้คุณรู้สึกดีขึ้น


3

เป็นความคิดที่ดีที่จะเรียนรู้ C ++ ผ่าน Qt ก่อนอื่นคุณต้องเรียนรู้แนวคิดภาษาที่เป็นอิสระจากกรอบการทำงานใด ๆ และนั่นคือสิ่งที่หนังสือ c ++ จะสอนคุณและพวกเขาถูกต้อง โดยพื้นฐานแล้ว 'for and loops', อาร์เรย์, รายการ, พอยน์เตอร์ 'เป็นภาษาการเขียนโปรแกรมทั้งหมด ฟังก์ชันการทำงานเพิ่มเติมมีให้โดยกรอบงาน เมื่อคุณเรียนรู้ภาษาการเขียนโปรแกรมคุณสามารถเรียนรู้กรอบใด ๆ เช่น Qt หรือ MFC ที่สร้างขึ้นโดยใช้ภาษาเพื่อให้แอปพลิเคชันสามารถพัฒนาได้อย่างรวดเร็ว เกี่ยวกับ Qt เมื่อคุณเรียนรู้ c ++ มันเป็นเฟรมเวิร์กที่ยอดเยี่ยมซึ่งทำให้คุณมีประสิทธิภาพเท่ากับนักพัฒนา Java หรือ. Net ไม่นานคุณจะสามารถพัฒนาแอพ iOS และ Android โดยใช้ Qt


2

ฉันคิดว่าวิธีที่ดีที่สุดในการเรียนรู้ C ++ คือการใช้ไวยากรณ์ของตัวเองเท่านั้น (Standard C ++) ดังนั้นคุณจะสามารถใช้ภาษา LANGUAGE และไม่ใช่ Qt (หรือกรอบงานอื่น ๆ ไลบรารี ... ฯลฯ )

ทำไม? เนื่องจากเป็นผู้เริ่มต้นเมื่อคุณดูรหัส C ++ ใด ๆ ที่ผสมกับรหัสที่ไม่ใช่ C ++ อื่น ๆ (Qt ในกรณีนี้) คุณจะไม่สามารถเห็นว่าอะไรคือสิ่งที่ C ++ และสิ่งที่ไม่ใช่ แต่จะเป็นกระบวนการที่ซับซ้อนกว่า

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