ㄍ๏ สารบัญ ๏ㄟ
๛ การสร้างและใส่ widget ลงในตาราง {QTableWidget .setCellWidget .setRowHeight .setColumnWidth}
๛ การใส่ข้อมูลลงในตาราง และตั้งชื่อแถวและคอลัมน์ {.setItem QTableWidgetItem .item}
๛ การตั้งชื่อแถวและคอลัมน์ {.setVerticalHeaderLabels .setHorizontalHeaderLabels}
๛ ดูช่วงของช่องที่เลือกอยู่และตำแหน่งปัจจุบัน {.currentRow .currentColumn .selectedRanges}
๛ การให้ทำคำสั่งเมื่อเปลี่ยนช่วงที่เลือก {.itemSelectionChanged}
๛ การให้ทำคำสั่งเมื่อคลิกที่ช่อง {.cellPressed .cellClicked .cellDoubleClicked .itemPressed .itemClicked .itemDoubleClicked}
๛ การให้ทำคำสั่งเมื่อช่องถูกแก้ {.cellChanged .itemChanged}
ต่อจาก
บทที่ ๒๑
ในบทนี้จะพูดถึง QTableWidget ซึ่งเป็นพื้นที่สำหรับแสดงข้อมูลเป็นตาราง หรือนำ widget มาจัดวางเป็นตารางก็ได้
การสร้างและใส่ widget ลงในตาราง {QTableWidget .setCellWidget .setRowHeight .setColumnWidth}介
QTableWidget นั้นจะคล้ายกับ QListWidget แต่ QListWidget จะนำข้อความมาจัดวางไล่เรียงเป็นแถวจากบนลงล่าง ส่วน QTableWidget จะเรียงเป็นตาราง คือเป็นสองมิติ มีทั้งแถวและคอลัมน์
นอกจากนี้แล้ว QTableWidget นั้นไม่ใช่ว่าใส่ได้แต่ข้อความ แต่ยังสามารถใส่ widget ต่างๆลงไปได้ด้วย
การสร้าง QTableWidget นั้นเริ่มจากกำหนดจำนวนแถวและคอลัมน์
ความสูงของแต่ละแถวนั้นกำหนดแยกกันโดยใช้เมธอด .setRowHeight
ส่วนความกว้างของแต่ละคำลัมน์ใช้เมธอด .setColumnWidth
การใส่ widget ลงในตารางทำได้โดยใช้เมธอด .setCellWidget โดยกำหนดค่าแถวและคอลัมน์
ตัวอย่างเช่น ลองสร้าง QTableWidget ขนาด ๔ แถว ๓ คอลัมน์ขึ้นมาแล้วใส่ QPushButton ลงไปในแต่ละช่อง
ก็จะได้ตารางที่มีปุ่มอยู่ในแต่ละช่องแบบนี้
การใส่ข้อมูลลงในตาราง และตั้งชื่อแถวและคอลัมน์ {.setItem QTableWidgetItem .item}介
ในตัวอย่างที่แล้วได้แสดงให้เห็นว่าถ้าจะเอา widget ทั่วไปมาใส่ลงในตาราง QTableWidget ก็ทำได้ แต่โดยทั่วไปแล้ว widget ที่ปกติใช้ใส่ลงใน QTableWidget คือ QTableWidgetItem
QTableWidgetItem นั้นปกติจะใส่ข้อมูลตัวหนังสือ และสามารถพิมพ์แก้ได้ วิธีการใส่เข้าไปจะใช้เมธอด .setItem เช่นเดียวกับตอนใส่ QListWidgetItem ลงใน QListWidget แต่ว่าสำหรับ QTableWidget นั้นจะต้องสร้างออบเจ็กต์ QTableWidgetItem ขึ้นมาโดยตรง จะใส่แค่ข้อความไม่ได้
หากต้องการเอาออบเจ็กต์ QTableWidgetItem ในแถวหรือหลักที่ต้องการให้ใช้เมธอด .item ที่ตัว QTableWidget นั้น
ถ้าดับเบิลคลิกที่ QTableWidgetItem ก็จะสามารถพิมพ์แก้ข้อความในช่องนั้นๆได้ด้วย และแม้ว่าในช่องนั้นๆจะยังไม่ได้ใส่ QTableWidgetItem เข้าไปก็สามารถพิมพ์ข้อความเข้าไปได้ แล้ว QTableWidgetItem ที่ช่องนั้นก็จะถูกสร้างขึ้นมาเอง
ตัวอย่าง ลองสร้างตารางแล้วใส่รายชื่อโปเกมอนเข้าไป
ก็จะได้ตารางแบบนี้ ซึ่งถ้าหากดับเบิลคลิกก็จะแก้ข้อความภายในนี้ได้ด้วย
ชื่อแถวและคอลัมน์นั้นหากไม่ได้ตั้งอะไรก็จะเป็นเลข 1,2,3,... ดังที่เห็นในตัวอย่างที่ผ่านมา แต่ถ้าต้องการตั้งชื่อเองก็ทำได้โดยใช้เมธอด .setVerticalHeaderLabels .setHorizontalHeaderLabels โดยใส่ลิสต์ของชื่อแต่ละแถวหรือแต่ละคอลัมน์ลงไป ชื่อนั้นจะไปแสดงในตารางตามนั้น
ตัวอย่างเช่น ลองสร้างตารางใส่ข้อมูลโปเกมอน
ดูช่วงของช่องที่เลือกอยู่และตำแหน่งปัจจุบัน {.currentRow .currentColumn .selectedRanges}介
แต่ละช่องในตาราง QTableWidget นั้นสามารถเอาเมาส์คลิกเพื่อเป็นการเลือกได้ และถ้าจะดูว่าแถวไหนคอลัมน์ไหนถูกเลือกอยู่ก็ทำได้โดยใช้เมธอด .currentRow .currentColumn
นอกจากนี้ถ้าใช้เมาส์ลากคลุมก็จะเลือกได้หลายช่องในเวลาเดียวกัน ซึ่งข้อมูลของส่วนที่ถูกเลือกนั้นจะเอาได้โดยใช้เมธอด .selectedRanges ซึ่งจะได้ออบเจ็กต์ QTableWidgetSelectionRange ซึ่งในนั้นเก็บข้อมูลว่าเราเลือกแถวไหนอยู่
ตัวอย่างเช่นสร้างตารางขึ้นมา พร้อมกับปุ่มที่กดแล้วให้พิมพ์ออกมาว่าตอนนี้เลือกช่องไหนอยู่ และเขียนลงบนหน้าต่างว่ากำลังลากคลุมส่วนไหนอยู่
ก็จะได้ตารางแบบนี้ออกมา ลองลากคลุมแล้วกดปุ่มดูผลที่ได้
การให้ทำคำสั่งเมื่อเปลี่ยนช่วงที่เลือก {.itemSelectionChanged}介
หากมีฟังก์ชันที่ต้องการให้ทำงานเมื่อมีการเปลี่ยนช่วงที่เลือกคลุมอยู่ภายในตาราง ให้ตั้ง .connect ที่ .itemSelectionChanged
ตัวอย่างเช่น ลองทำให้เมื่อมีการเลือกก็ให้แสดงข้อความที่ด้านล่างบอกว่าเลือกอยู่กี่ช่อง
ได้ช่องตารางแบบนี้ออกมา ลองลากคลุมเพื่อดูความเปลี่ยนแปลงได้
การให้ทำคำสั่งเมื่อคลิกที่ช่อง {.cellPressed .cellClicked .cellDoubleClicked .itemPressed .itemClicked .itemDoubleClicked}介
ถ้ามีฟังก์ชันที่ต้องการให้ทำเมื่อมีการคลิกที่ช่องให้ตั้ง .connect ที่ .cellPressed .cellClicked .cellDoubleClicked คล้ายกับกรณี QListWidgetItem
โดยค่าพารามิเตอร์ของฟังก์ชันนี้จะได้มา ๒ ตัวคือค่าลำดับแถวและคอลัมน์
ตัวอย่างเช่น
จะได้ตารางแบบนี้ ลองกดแต่ละช่องหรือลองดับเบิลคลิกแล้วดูความเปลี่ยนแปลงของข้อความที่ขึ้นมาได้
นอกจากนี้ยังมี .itemPressed .itemClicked .itemDoubleClicked ซึ่งจะคล้ายกับ แต่ผลที่ได้จะเป็นตัวออบเจ็กต์ช่องนั้น
ตัวอย่างเช่น ลองทำให้เมื่อถูกคลิกมีแล้วแสดงข้อความที่อยู่ในช่องนั้นออกมา
จะได้ตารางแบบนี้ พอคลิกช่องไหนแล้วอักษรในช่องนั้นก็จะปรากฏในแถบสถานะด้านล่าง
การให้ทำคำสั่งเมื่อช่องถูกแก้ {.cellChanged .itemChanged}介
แต่ละช่องภายในตารางนั้นสามารถแก้ได้เมื่อดับเบิลคลิก หากต้องการให้เมื่อมีการใส่หรือเปลี่ยนข้อความแล้วมีการทำคำสั่งอะไรที่ต้องการก็อาจทำได้โดยตั้ง .connect ที่ .cellChanged หรือ .itemChanged
ตัวอย่างเช่นลองสร้างตาราง แล้วให้เวลาที่มีการแก้ข้อความมีการพิมพ์ตำแหน่งที่แก้และข้อความใหม่ที่ได้ออกมา
ลองดับเบิลคลิกดูสักช่องแล้วใส่ข้อความเข้าไป แถวและคอลัมน์และข้อความที่ใส่ไปนั้นก็จะถูกพิมพ์ออกมา
อ่านบทถัดไป >>
บทที่ ๒๓