ฉันใช้ QT เป็นแขนและพบว่าปุ่มปิดดั้งเดิม (x) ของ qtabwidget ใน QT4 นั้นเล็กเกินไปและยากที่จะกดด้วยทัชแพด ดังนั้นฉันจึงนึกถึงฟังก์ชั่นดับเบิลคลิกที่คล้ายกับเบราว์เซอร์ เนื่องจากฉันเคยทำงานกับผู้จัดการทรัพยากร C# มาก่อนฉันคิดว่าฉันสามารถผูก Doubleclick โดยตรงได้ แต่หลังจากค้นหาผ่านมันฉันไม่สามารถหาสล็อตที่เกี่ยวข้องได้ เป็นผลให้ฉันจับสัญญาณใน QWidget ซึ่งเป็นเหตุการณ์เมาส์ที่ไม่มีแท็ก qtabwidget นั่นเป็นเคล็ดลับ! จากนั้นฉันค้นหาคำถามต่าง ๆ ทางออนไลน์และพบคำถามต่าง ๆ และแต่ละคนก็ตอบได้อย่างถูกต้อง ... ในที่สุดหลังจากคิดถึงเรื่องนี้มันไม่ได้ผลจริงๆดังนั้นฉันจึงใช้วิธีที่โง่ที่สุดในการเลียนแบบ Hock!
ดังนั้นฉันโหลด qtabwidget (เพราะ tabbar () ได้รับการปกป้องมันเป็นการหลอกลวง!) เพื่อที่ฉันจะได้รับแท็ก
แท็บคลาส: สาธารณะ qTabWidGet {Q_Object สาธารณะ: แท็บ (qWidGet *parent =); qtabbar* getBar (); ได้รับการคุ้มครอง: โมฆะ MousepressEvent (qmousevent *เหตุการณ์); - จากนั้นเมื่อใช้ตัวกรองเหตุการณ์ก่อนกำหนดว่าเหตุการณ์จะเป็นเหตุการณ์ดับเบิลคลิกแล้วพิจารณาว่าเป็นตำแหน่งฉลากหรือไม่ ถ้าเป็นเช่นนั้นให้ลบหน้าแท็บปัจจุบัน เนื่องจากการคลิกจะต้องถูกเรียกใช้ในเหตุการณ์ดับเบิลคลิกนั่นคือหน้าแท็บจึงถูกเลือกดังนั้นจึงไม่จำเป็นต้องพิจารณาปัญหาการเปลี่ยนแปลงดัชนีที่เกิดจากการคลิกสองครั้งหน้าแท็บอื่น ๆ
#ifndef myEventFilter_h #define myEventFilter_h #include <qmainwindow> #include <qmouseVent> #include "tab.h" extern int tabindex_current; extern int tabindex_old; แท็บภายนอก *TabWidget; qpoint tableft ภายนอก; tabwidth ภายนอก; tabheight ภายนอก; // ใช้ดับเบิลคลิกเพื่อปิดคลาสแท็บแท็บ MyEventFilter: สาธารณะ QObject {สาธารณะ: myEventFilter (): qObject () {}; ~ MyEventFilter () {}; บูล EventFilter (QObject* Object, QEvent* Event) {if (Event-> type () == QEvent :: MouseButTondBlclick) {QMouseVent* e = static_cast <qMouseVent*> (เหตุการณ์); qpoint pos = e-> pos (); int x = tableft.x (); int x = tableft.x ()+tabwidth; int y = tableft.y (); int y = tableft.y ()+tabheight; if (pos.x ()> = x && pos.y ()> = y && pos.x () <= x && pos.y () <= y) tabwidget-> removeTab (tabindex_current); } return qObject :: EventFilter (วัตถุ, เหตุการณ์); - - #endif // myEventFilter_H ในที่สุดผูกกับฟังก์ชั่นหลักหลักเพื่อให้เหตุการณ์ทั้งหมดสามารถจับได้:
qapp-> installEventFilter (ใหม่ myEventFilter ());
นอกจากนี้ข้อมูลความกว้างจะต้องได้รับการอัปเดตเมื่อเปลี่ยนหน้าแท็บ (ไม่จำเป็นต้องอัปเดตความสูง):
เป็นโมฆะ MainWindow :: UpdateBar () {tabindex_current = tabWidGet-> currentIndex (); tabindex_old = tabindex_current; qtabbar *bar = tabwidget-> getBar (); if (bar-> size (). width ()>) tabwidth = bar-> size (). width (); - ด้านบนเป็นวิธีการปิดสองครั้งดับเบิลคลิกของแท็ก qtabwidget แนะนำให้คุณรู้จักโดยตัวแก้ไข (แนะนำ) ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับทุกคนในเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!