Qt + หน้าต่างไร้กรอบ + คอมโพสิต

ฉันกำลังพยายามเปิดหน้าต่างป๊อปอัปสองสามหน้าต่าง (ระดับบนสุด) ซึ่งไม่มีกรอบ ฉันสามารถทำได้ด้วย:

window.setWindowFlags(Qt.FramelessWindowHint | Qt.Dialog)

แต่ปัญหาคือว่า windows ไม่ผ่านตัวประกอบระบบปฏิบัติการ (เช่นบน windows พวกเขาไม่มีเงาตกกระทบ) ฉันสามารถสร้างเงาของหน้าต่างได้ด้วยแฟล็ก Qt.Popup และ Qt.ToolTip แต่ทั้งสองอย่างนี้มีปัญหาด้านพฤติกรรม คำแนะนำเครื่องมือจะอยู่ด้านบนเสมอ และป๊อปอัปจะปิดเมื่อโฟกัสหายไป

มีวิธีใดบ้างที่ฉันสามารถแสดงหน้าต่างแบบไร้กรอบพร้อมเอฟเฟกต์เงาของตัวจัดการหน้าต่าง OS เริ่มต้นได้


person sepul    schedule 30.09.2013    source แหล่งที่มา
comment
โปรดตรวจสอบสิ่งนี้ ฉันไม่แน่ใจว่านี่คือสิ่งที่คุณต้องการหรือไม่ แต่สำหรับหน้าต่างที่มีเฟรมน้อยคุณต้องวาดเอฟเฟกต์เงา stackoverflow.com/questions/12347776/   -  person Shah-nawaj Shuhan    schedule 01.10.2013
comment
ใช่ ฉันเห็นโพสต์นั้น แต่นั่นไม่ตรงกับความต้องการของโปรแกรมของฉัน ฉันกำลังพัฒนาแอปที่แสดงหน้าต่างป๊อปอัปบนเดสก์ท็อป (ซึ่งต้องมีการแรเงา) ดังนั้นฉันจึงต้องการตัวสร้างระบบปฏิบัติการเริ่มต้น เช่นเดียวกับหน้าต่างระดับเดสก์ท็อปอื่นๆ   -  person sepul    schedule 09.10.2013


คำตอบ (2)


พบวิธีแก้ปัญหาบน windows แต่ฉันไม่สามารถทำมันด้วย Qt ได้ ดังนั้นฉันจึงใช้แฮ็ค win32
เพิ่มสิ่งนี้ลงในตัวสร้างคลาส QWidget :

if sys.platform == 'win32':
  import win32api
  win32api.SetClassLong(eval(self.winId().__hex__()), -26, 0x0008 | 0x00020000)

จริงๆ แล้วฉันได้เพิ่มสไตล์ CS_DROPSHADOW ให้กับสไตล์คลาสหน้าต่าง

person sepul    schedule 14.10.2013

อาจช่วยให้ผู้ใช้รายถัดไปใช้แฟล็ก Qt.ToolTip และหลีกเลี่ยงการมี Tooltips อยู่ด้านบนเสมอ

รหัสหลาม

self.setWindowFlags(self.windowFlags() | Qt.ToolTip)
self.setWindowFlags(self.windowFlags() & ~Qt.WindowStaysOnTopHint)
person SyedElec    schedule 27.11.2015