亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

PyQt4中無邊框窗口的移動(拖動)

2019-11-14 17:50:56
字體:
來源:轉載
供稿:網友

搜索了很多文章,有關于Qt的C++版本無邊框窗口的拖動:

例如這篇《Qt 無標題無邊框程序的拖動和改變大小》http://blog.csdn.net/kfbyj/article/details/9284923

其中主要講到兩種方法,但是PyQt(Qt的Python版本)實現就沒有找到,以下主要講PyQt4中的實現

 

方法1:在QWidget/QDialog中重寫mousePRessEvent和mouseMoveEvent方法,利用move方法移動窗口

這種方法相對簡單,但是缺陷在于會在鼠標按下移動過程中,整個窗口是實時移動,實時重繪,移動快了會出現重影(由于多次重繪)。

 

#!/usr/bin/python  #-*-coding:utf-8-*-from PyQt4.QtGui import *from PyQt4.Qt import *from PyQt4.QtCore import *class AboutUsDialog(QDialog):        def __init__(self, parent=None):        super(AboutUsDialog, self).__init__(parent)        self.setWindowFlags(Qt.FramelessWindowHint | Qt.Dialog)            def mousePressEvent(self, event):        if event.button() == Qt.LeftButton:            self.dragPosition = event.globalPos() - self.frameGeometry().topLeft()            Qapplication.postEvent(self, QEvent(174))            event.accept()    def mouseMoveEvent(self, event):        if event.buttons() == Qt.LeftButton:            self.move(event.globalPos() - self.dragPosition)            event.accept()            if __name__ == '__main__':        import sys    app = QApplication(sys.argv)    aboutus = AboutUsDialog()    aboutus.show()    sys.exit(app.exec_())    

而正常的windows窗體移動都會在鼠標按下后呈現虛線邊框,只移動虛線邊框,鼠標放開后才會將窗體真正移動

方法二:使用winEvent處理消息,將鼠標點擊窗體內的事件WM_NCHITTEST,模擬成為點擊原生標題欄的事件HTCAPTION。在無邊框的窗口中增加isInTitle方法來判斷鼠標位置是否在窗口中自定義的標題欄中。

此方法可以實現鼠標在自定義欄中的鼠標拖動,但是暫時不支持鼠標雙擊進行最大化切換和還原。

#!/usr/bin/python  #-*-coding:utf-8-*-from PyQt4.QtGui import *from PyQt4.Qt import *from PyQt4.QtCore import *class AboutUsDialog(QWidget):        def __init__(self, parent=None):        super(AboutUsDialog, self).__init__(parent)        self.setWindowFlags(Qt.FramelessWindowHint | Qt.Dialog)            def isInTitle(self, xPos, yPos):        return yPos < 30        class MyApplication(QApplication):        def __init__(self, args):        super(MyApplication, self).__init__(args)        def GET_X_LPARAM(self, param):        #define LOWord(l)           ((WORD)((DWORD_PTR)(l) & 0xffff))        #define HIWORD(l)           ((WORD)((DWORD_PTR)(l) >> 16))        #define GET_X_LPARAM(lp)                        ((int)(short)LOWORD(lp))        #define GET_Y_LPARAM(lp)                        ((int)(short)HIWORD(lp))        return param & 0xffff    def GET_Y_LPARAM(self, param):        return param >> 16        def winEventFilter(self, msg):        if msg.message == 0x84: #WM_NCHITTEST             form = self.activeWindow()            if form:                xPos = self.GET_X_LPARAM(msg.lParam) - form.frameGeometry().x()                yPos = self.GET_Y_LPARAM(msg.lParam) - form.frameGeometry().y()#                鼠標在窗體自定義標題范圍內,窗體自定義一個isInTitle的方法判斷 #                if yPos < 30 and xPos < 456:                if not form.isMaximized() and hasattr(form, 'isInTitle') and form.isInTitle(xPos, yPos):                    return True, 0x2 #HTCAPTION                     return False, 0        if __name__ == '__main__':        import sys    app = MyApplication(sys.argv)    aboutus = AboutUsDialog()    aboutus.showNormal()    sys.exit(app.exec_())    

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日本一区二区在线播放| 日本一区二区在线免费播放| 欧美大片va欧美在线播放| 国产精品嫩草影院久久久| 亚洲精品在线视频| 欧美性xxxxhd| 欧美中文字幕第一页| 狠狠色狠狠色综合日日小说| 日韩中文字在线| 中文字幕久精品免费视频| 91深夜福利视频| 国产精品wwwwww| 欧美电影在线观看高清| 亚洲欧美中文日韩v在线观看| 国产精品啪视频| 久久视频中文字幕| 亚洲国产日韩欧美在线图片| 国产成人精品视频在线观看| 国产精品三级网站| 亚洲石原莉奈一区二区在线观看| 欧美在线精品免播放器视频| 亚洲美女性视频| 久久久久久国产精品| 91精品久久久久久久久久久久久久| 少妇高潮久久77777| 欧美午夜影院在线视频| 成人免费福利视频| 97国产一区二区精品久久呦| 亚洲成年网站在线观看| 日本一区二区三区四区视频| 久久高清视频免费| 色综合久久久888| 91免费欧美精品| 日韩大片免费观看视频播放| 国产一区欧美二区三区| 中文亚洲视频在线| 日韩欧美亚洲国产一区| 国产成人一区二区在线| 成人激情视频免费在线| 亚洲成人国产精品| 综合网日日天干夜夜久久| 久久综合久久八八| 欧美性videos高清精品| 91精品综合视频| 精品av在线播放| 97久久精品视频| 日韩av成人在线| 国内外成人免费激情在线视频网站| 中文字幕亚洲激情| 中文字幕在线观看亚洲| 色哟哟亚洲精品一区二区| 中文字幕免费国产精品| 亚洲男人的天堂在线播放| 欧美性生交xxxxxdddd| 国产玖玖精品视频| 成人激情视频在线| 日韩欧美有码在线| 操人视频在线观看欧美| 欧美wwwxxxx| 精品久久久久久中文字幕一区奶水| 91美女片黄在线观看游戏| 国产精品香蕉av| 国产欧美久久久久久| 欧美激情一级二级| 欧美激情18p| 欧美一级大胆视频| 亚洲乱码一区二区| 精品国产乱码久久久久久虫虫漫画| 国产欧美日韩专区发布| 色无极影院亚洲| 欧美日韩成人网| 欧美中文字幕视频在线观看| 久久久久久久久久久网站| 国产视频在线观看一区二区| 欧美性xxxx18| 中文字幕一区二区精品| 国产亚洲激情在线| 亚洲国产精品中文| 欧美一性一乱一交一视频| 欧美日韩国产丝袜美女| 91极品视频在线| 欧美日韩xxxxx| 欧美激情免费在线| 欧美在线性视频| 久久久久久久一区二区| 久久精品国产2020观看福利| 九九九久久国产免费| 美女av一区二区| 98午夜经典影视| 亚洲精品在线观看www| 中文字幕亚洲综合| 北条麻妃一区二区在线观看| 91精品综合久久久久久五月天| 91视频国产高清| 在线看日韩欧美| 欧美日韩国产va另类| 清纯唯美亚洲综合| 久久久久久免费精品| 97精品在线视频| 国产精品国产三级国产aⅴ浪潮| 久久精品国产欧美亚洲人人爽| 久久九九国产精品怡红院| 欧美乱人伦中文字幕在线| 久久久久久久久久久av| 亚洲精品大尺度| 亚洲激情在线观看| 欧美日韩亚洲天堂| 欧美激情xxxx性bbbb| 亚洲va欧美va国产综合剧情| 国产精品激情av在线播放| 亚洲人精选亚洲人成在线| 色哟哟入口国产精品| 久久久成人精品| 精品日本高清在线播放| 91九色国产视频| 久久久亚洲国产天美传媒修理工| 狠狠躁夜夜躁人人躁婷婷91| 欧美成人亚洲成人日韩成人| 欧美激情啊啊啊| 欧美激情精品久久久久久变态| 久久久久久国产免费| 自拍视频国产精品| 亚洲国产毛片完整版| 国产精品成人免费视频| 久久九九精品99国产精品| 国产精品久久二区| 欧美大胆在线视频| 亚洲人成人99网站| 激情av一区二区| 亚洲欧美www| 亚洲第一网站免费视频| 成人深夜直播免费观看| 亚洲欧美综合图区| 九九精品视频在线| 国产v综合ⅴ日韩v欧美大片| 欧美精品一区二区三区国产精品| 国产色婷婷国产综合在线理论片a| 欧美一级黄色网| 亚洲国产日韩欧美在线99| 日韩欧美在线视频日韩欧美在线视频| 国产日韩欧美中文在线播放| 91精品久久久久久综合乱菊| 久久亚洲精品中文字幕冲田杏梨| 91亚洲永久免费精品| 精品视频在线播放色网色视频| 亚洲人成在线观| 91精品久久久久久久久不口人| 欧美在线中文字幕| 亚洲精品在线视频| 亚洲成人精品视频| 欧美一级片免费在线| 欧美一区二区三区……| 亚洲欧美激情一区| 久久精品国产清自在天天线| 色偷偷噜噜噜亚洲男人| 久久久久久av| 国产精品久在线观看| 亚洲伊人久久综合| 亚洲一区第一页| 欧美精品日韩www.p站| 欧美一级视频免费在线观看| 精品国产视频在线| 中文字幕精品www乱入免费视频| 日韩av一区在线|