PyQt QTableView ตั้งค่าป้ายกำกับส่วนหัวแนวนอนและแนวตั้ง

ใช้ QTableWidget ฉันทำได้

table = QTableWidget()
table.setHorizontalHeaderLabels(QString("Name;Age;Sex;Add").split(";"))
table.horizontalHeaderItem().setTextAlignment(Qt.AlignHCenter)

ฉันจะทำเช่นเดียวกันกับ QTableView ได้อย่างไร ??


person Ruchit    schedule 14.05.2016    source แหล่งที่มา


คำตอบ (1)


วิดเจ็ตตาราง/ทรี/รายการเป็นแบบอิงตามรายการ มุมมองตาราง/ทรี/รายการเป็นไปตามมุมมอง/โมเดล (บางครั้งเรียกว่า MVC สำหรับโมเดล/มุมมอง/ตัวควบคุม) ในระบบ Model/View ข้อมูลจะถูกตั้งค่าและจัดการบนโมเดล และมุมมองจะแสดงข้อมูลนั้นเท่านั้น หากต้องการใช้วิดเจ็ต View คุณต้องสร้างคลาสโมเดลด้วย ในหลายกรณี ผู้คนจะสร้างคลาสของตนเองและคลาสย่อยจาก QAbstractItemModel แต่คุณไม่ต้องการ ไม่ต้อง Qt มีโมเดลที่ไม่ใช่นามธรรมที่คุณสามารถใช้ได้กับคลาสมุมมองทั้งหมด - QStandardItemModel

model = QStandardItemModel()
model.setHorizontalHeaderLabels(['Name', 'Age', 'Sex', 'Add'])
table = QTableView()
table.setModel(model)

มีสองวิธีที่คุณสามารถจัดตำแหน่งได้ ข้อมูลการจัดตำแหน่งได้รับการสนับสนุนจริง ๆ ในโมเดล แต่มุมมองส่วนหัวช่วยให้คุณตั้งค่าเริ่มต้นได้ (ฉันเดาว่าจะใช้สิ่งนั้นหากไม่ได้ตั้งค่าข้อมูลการจัดตำแหน่งในโมเดล)

header = table.horizontalHeader()
header.setDefaultAlignment(Qt.AlignHCenter)

เพื่อให้สามารถควบคุมได้มากขึ้น คุณสามารถตั้งค่าข้อมูลการจัดตำแหน่งบนโมเดลได้โดยตรง

# Sets different alignment data just on the first column
model.setHeaderData(0, Qt.Horizontal, Qt.AlignJustify, Qt.TextAlignmentRole)

แต่พลังของระบบ View/Model ก็คือ มุมมองสามารถเลือกที่จะแสดงข้อมูลนั้นจากโมเดล ใดก็ได้ ในแบบที่ต้องการ หากคุณต้องการสร้างมุมมองที่กำหนดเอง คุณสามารถควบคุมวิธีจัดแนวและแสดงข้อความในแต่ละคอลัมน์ได้อย่างสมบูรณ์

person Brendan Abel    schedule 14.05.2016