Qt + Jendela Tanpa Bingkai + Pengomposisian

Saya mencoba membuka beberapa jendela popup (tingkat atas), yang tanpa bingkai. Saya dapat mencapai ini dengan:

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

Tapi masalahnya windows, tidak melalui OS compositor (misalnya di windows tidak ada drop shadownya). Saya dapat mencapai bayangan jendela dengan tanda Qt.Popup dan Qt.ToolTip, tetapi keduanya memiliki masalah perilaku, Tooltips selalu berada di atas dan popup ditutup ketika fokusnya hilang.

Jadi, adakah cara agar saya dapat menampilkan jendela tanpa bingkai dengan efek bayangan pengelola jendela OS default?


person sepul    schedule 30.09.2013    source sumber
comment
Silakan periksa ini, saya tidak yakin apakah ini yang Anda inginkan tetapi untuk jendela tanpa bingkai Anda perlu menggambar efek bayangan stackoverflow.com/questions/12347776/   -  person Shah-nawaj Shuhan    schedule 01.10.2013
comment
Ya, saya melihat postingan itu. tapi itu tidak memenuhi kebutuhan program saya, saya sedang mengembangkan aplikasi yang menampilkan jendela popup di desktop (yang perlu dibayangi). Jadi saya memerlukan kompositor OS default, sama seperti windows tingkat desktop lainnya   -  person sepul    schedule 09.10.2013


Jawaban (2)


Menemukan solusi di windows. tapi saya tidak bisa melakukannya dengan Qt, jadi saya menggunakan win32 hack.
Tambahkan ini ke konstruktor kelas QWidget :

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

Saya sebenarnya menambahkan gaya CS_DROPSHADOW ke gaya kelas jendela

person sepul    schedule 14.10.2013

Mungkin membantu bagi pengguna berikutnya untuk menggunakan tanda Qt.ToolTip dan menghindari Tooltips selalu berada di atas.

Kode piton

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