QMainWindow, QWidget และ QDialog แตกต่างกันอย่างไร


คำตอบ:


130

A QWidgetเป็นคลาสพื้นฐานสำหรับคลาสที่วาดได้ทั้งหมดใน Qt QWidgetคลาสฐานใด ๆสามารถแสดงเป็นหน้าต่างโดยแสดงเมื่อไม่มีพาเรนต์

A QDialogขึ้นอยู่กับQWidgetแต่ได้รับการออกแบบให้แสดงเป็นหน้าต่าง จะปรากฏในหน้าต่างเสมอและมีฟังก์ชั่นเพื่อให้ทำงานได้ดีกับปุ่มทั่วไปในกล่องโต้ตอบ (ยอมรับปฏิเสธ ฯลฯ )

QMainWindowได้รับการออกแบบตามความต้องการทั่วไปสำหรับหน้าต่างหลักที่จะมี มีตำแหน่งที่กำหนดไว้ล่วงหน้าสำหรับแถบเมนูแถบสถานะแถบเครื่องมือและวิดเจ็ตอื่น ๆ ไม่มีค่าเผื่อในตัวสำหรับปุ่มต่างๆเช่นQDialogไม่


1
ฉันค้นหาคำถามนี้ แต่นั่นไม่ใช่คำตอบที่ฉันรอ ใน QtDesigner โดยใช้ QMainWindow จะให้แถบเมนูและแถบสถานะ เมื่อคุณเขียนโค้ดด้วยตัวเองและใช้ QMainWindow คุณจะไม่มีสิ่งนี้ หรือคำพูดของคุณที่คุณสามารถทำบางอย่างเช่น window.addToolBar ("Toolbar"); และจะวางไว้ในสถานที่ที่กำหนดไว้ล่วงหน้าโดยไม่มีอาการปวดหัวอื่น ๆ ?
Lilian A. Moraru

1
@MoraruLilian: ฉันไม่ได้ใช้ QMainWindow จริงๆดังนั้นฉันจึงไม่รู้รายละเอียด ดังที่ฉันได้กล่าวไว้ในคำตอบของฉันฉันรู้ว่ามันมีที่สำหรับพวกเขาดังนั้นการทำในโค้ดอาจทำได้ง่ายอย่างที่คุณระบุ
Caleb Huitt - cjhuitt

8
@Caleb_Huitt มันทำในสิ่งที่ฉันพูด ฉันอยากจะบอกให้ชัดเจนว่านั่นคือสิ่งที่คุณพยายามจะพูด อย่างไรก็ตามฉันขอแนะนำให้ใช้ QWidget แทน QMainWindow เสมอ คุณอาจประสบปัญหาได้เช่นการตั้งค่าเค้าโครงอื่น หากคุณต้องการตั้งค่าเค้าโครงใหม่ใน QMainWindow คุณจะต้องสร้าง QWidget และตั้งเป็นวิดเจ็ตกลางสำหรับ QMainWin จากนั้นใน QWidget คุณสามารถ setLayout (QLayout *) ได้ ในขณะที่คุณสามารถหลีกเลี่ยงอาการปวดหัวเพิ่มเติมได้โดยใช้ QWidget แน่นอนว่า QMainWindow เสนอการตั้งค่า ToolBar และ StatusBar ที่ง่าย แต่คุณสามารถทำได้ด้วยตัวเองใน QWidget ...
Lilian A. Moraru

2
เหตุผลหนึ่งที่เราต้องการใช้QMainWindowแทนคลาสพื้นฐานQWidgetคือQMainWindowมีQDockWidgetการสนับสนุนในขณะที่QWidgetเพียงอย่างเดียวไม่มี
ComradeJoecool

2
@ mLstudent33 ฟังดูเหมือนเป็นคำถามที่ดีสำหรับการจัดทำเอกสารและหากไม่ได้ผลให้ถามที่นี่เป็นคำถามหลักมากกว่าในความคิดเห็น ตัวอย่างหนึ่ง (สำหรับ Qt5) สามารถดูได้ที่doc.qt.io/qt-5/qtwidgets-mainwindows-application-example.html
Caleb Huitt - cjhuitt

4

QWidget : เป็นคลาสพื้นฐานสำหรับองค์ประกอบ GUI อื่น ๆ ทั้งหมดในโมดูล QtWidgets สามารถประกอบเป็นหน้าต่างได้ด้วยตัวเองหรือเป็นส่วนหนึ่งของ QLayout หรือเป็นเพียงสมาชิกของลำดับชั้นแม่ลูก

QDialog : มักใช้เพื่อ - เซอร์ไพรส์! - แสดงกล่องโต้ตอบชั่วคราวเมื่อจำเป็นต้องป้อนข้อมูลของผู้ใช้

QMainWindow : เป็นคลาสอำนวยความสะดวกที่สามารถใช้เป็นหน้าต่างหลักของแอปพลิเคชันของคุณ มีคุณสมบัติที่ดีบางอย่างในตัว: แถบสถานะแถบเครื่องมือและแถบเมนู

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