เป็นไปได้ไหมที่บังคับให้ Qt เรียก paintEvent หลังจากวาดส่วนประกอบ Qt อื่น ๆ แล้ว?

ฉันมีคลาสที่ขยาย QWidget และมี QLabel (lblBackground) ฉันได้แทนที่ฟังก์ชัน paintEvent ด้วย

ฉันต้องการวาดบางสิ่งบางอย่างที่ด้านบนของ lblBackground อย่างไรก็ตาม มีการเรียกใช้เมธอด paintEvent ก่อนที่จะวาด QLabel ดังนั้นภาพวาดที่กำหนดเองของฉันจึงถูกเขียนทับ

มีวิธีเปลี่ยนลำดับการวาดหรือไม่?


person vahapt    schedule 18.04.2011    source แหล่งที่มา


คำตอบ (2)


การวาดภาพเด็กๆ บนพ่อแม่เป็นเรื่องปกติ ที่ถูกกล่าวว่าคุณสามารถลองใช้ตัวเลือกใดตัวเลือกหนึ่งต่อไปนี้:

  1. ขยาย QLabel เองเพื่อทาสีสิ่งที่คุณต้องการ
  2. ลองตั้งค่าสถานะ Qt::WA_TranslucentBackground บน QLabel และมีช่องอัลฟ่าเพื่อให้พาเรนต์ที่อยู่ด้านล่าง (QWidget) ส่องผ่าน
  3. หากคุณใช้ QLabel เพื่อวาดพื้นหลังบางส่วนเท่านั้น บางทีคุณสามารถกำจัดมันออกและทาสีพื้นหลังที่ต้องการเป็นอันดับแรกใน paintEvent() ของ QWidget
person Steffen    schedule 18.04.2011

หากคุณต้องการใช้ป้ายกำกับเป็นพื้นหลัง ให้สร้างวิดเจ็ตที่กำหนดเองเป็นรายการย่อยของป้ายกำกับของคุณ อาจแบ่งงานที่เกี่ยวข้องกับกรอบหน้าต่างบางส่วนออก หากมี (เพื่อนำไปใช้เป็นพาเรนต์ของป้ายกำกับ) และการวาด/การควบคุม/อื่นๆ (เป็นรายการย่อยของป้ายกำกับ)

person Serge Dundich    schedule 18.04.2011