日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

python GUI庫圖形界面開發之PyQt5信號與槽事件處理機制詳細介紹與實例解析

瀏覽:124日期:2022-08-03 11:52:43

PyQt5中信號與槽可以說是對事件處理機制的高級封裝,如果說事件是用來創建窗口控件的,那么信號與槽就是用來對這個控件進行使用的,比如一個按鈕,當我們使用按鈕時,只關心clicked信號,至于這個按鈕如何接受并處里鼠標點擊事件,然后在發射這個信號,則不關心,但是如果要重載一個按鈕,這時候就要關心了,比如可以改變它的行為:在鼠標按下時觸發clicked信號,而不是釋放時

PyQt5常見事件類型

pyqt是對Qt的封裝,qt程序是事件驅動的,它的每個動作都有幕后某個事件所觸發,Qt事件類型有很多,常見的如下

鍵盤事件:按鍵的按下與松開 鼠標事件:鼠標指針的移動,鼠標按鍵的按下與松開 拖放事件:用鼠標進行拖放 滾輪事件:鼠標滾輪滾動 繪屏事件:重繪制屏幕的某些部分 定時事件:定時器到時 焦點事件:鍵盤焦點移動 進入和離開事件:鼠標指針移入Widget內,或者移出 移動事件:Widget的位置改變 大小改變事件:widget的大小改變 顯示和隱藏事件:widget顯示與隱藏 窗口事件:窗口是否為當前窗口

還有一些常見的qt事件,比如Socket事件,剪切板事件,字體改變事件,布局改變事件

使用事件處理的方法

pyqt提供如下5中事件處理和過濾的方法(有弱到強),其中只有前兩種方法使用最頻繁

1 、重新實現事件函數

比如mousePressEvent(),keyPressEvent(),paintEvent(),這是最常規的事件處理方法

2 、重新實現QObject.event()

一般用在pyqt沒有提供該事件的處理函數的情況下,即增加新事件時

3 、安裝事件過濾器

如果對QObject調用installEventFilter,則相當于為這個QObject安裝了一個事件過濾器,對于QObject的全部事件來說,它們都會先傳遞到事件過濾函數eventFilter中,在這個函數中,我們可以拋棄或者修改這些事件,比如對自己感興趣的事件使用自定義的處理機制,對其他事件采用默認的事件處理機制,由于這中方法會調用installEventFilter的所有QObject的事件進行過濾,因此如果要過濾的事件比較多,則會降低程序的性能

4 、在QApplication中安裝事件過濾器

這種方法比上一種更強大,QApplication的事件過濾器將捕獲所有的QObject事件,而且第一個獲得該事件,也就是說,在將事件發送給其他任何一個事件過濾器之前,都會發送給QApplication的事件過濾器

5 、重新實現QApplication的notify()方法

pyqt使用notify來分發事件,要想在任何事件處理器之前捕獲事件,唯一的方法就是重新實現QApplication的notify(),在實踐中,在調試才會用這中方法

PyQt5信號與槽事件處理經典案例

import sysfrom PyQt5.QtCore import (QEvent, QTimer, Qt)from PyQt5.QtWidgets import (QApplication, QMenu, QWidget)from PyQt5.QtGui import QPainterclass Widget(QWidget): def __init__(self, parent=None): super(Widget, self).__init__(parent) #初始化數據 #鼠標雙擊False self.justDoubleClicked = False #按鍵,輸出文本,提示消息為空 self.key = '' self.text = '' self.message = '' #設置窗口初始大小與位置 self.resize(400, 300) self.move(100, 100) #設置標題 self.setWindowTitle('Events') #定時器1秒后執行槽函數 QTimer.singleShot(1000, self.giveHelp) # 避免窗口大小重繪事件的影響,可以把參數0改變成3000(3秒),然后在運行,就可以明白這行代碼的意思。 def giveHelp(self): self.text = '請點擊這里觸發追蹤鼠標功能' # 重繪事件,也就是觸發paintEvent函數。 self.update() ’’’重新實現關閉事件’’’ def closeEvent(self, event): print('Closed') ’’’重新實現上下文菜單事件’’’ def contextMenuEvent(self, event): #實例化菜單,添加子菜單one two并附加快捷鍵功能,關聯槽函數 menu = QMenu(self) oneAction = menu.addAction('&One') twoAction = menu.addAction('&Two') oneAction.triggered.connect(self.one) twoAction.triggered.connect(self.two) #如果message為空,執行 if not self.message: #在菜單中添加一條分割線 menu.addSeparator() #添加自菜單three,關聯槽函數 threeAction = menu.addAction('Thre&e') threeAction.triggered.connect(self.three) #菜單欄出現在鼠標的位置 menu.exec_(event.globalPos()) ’’’上下文菜單槽函數’’’ def one(self): self.message = 'Menu option One' self.update() def two(self): self.message = 'Menu option Two' self.update() def three(self): self.message = 'Menu option Three' self.update() ’’’重新實現繪制事件’’’ def paintEvent(self, event): text = self.text i = text.find('nn') if i >= 0: text = text[0:i] # 若觸發了鍵盤按鈕,則在文本信息中記錄這個按鈕信息。 if self.key: text += 'nn你按下了: {0}'.format(self.key) painter = QPainter(self) painter.setRenderHint(QPainter.TextAntialiasing) # 繪制信息文本的內容 painter.drawText(self.rect(), Qt.AlignCenter, text) # 若消息文本存在則在底部居中繪制消息,5秒鐘后清空消息文本并重繪。 if self.message: #顯示給定坐標處的文本,坐標,對齊方式。文本內容 painter.drawText(self.rect(), Qt.AlignBottom | Qt.AlignHCenter, self.message) #5秒鐘后觸發清空信息的函數,并重新繪制事件 QTimer.singleShot(5000, self.clearMessage) QTimer.singleShot(5000, self.update) ’’’清空消息文本的槽函數’’’ def clearMessage(self): self.message = '' ’’’重新實現調整窗口大小事件’’’ def resizeEvent(self, event): self.text = '調整窗口大小為: QSize({0}, {1})'.format( event.size().width(), event.size().height()) self.update() ’’’重新實現鼠標釋放事件’’’ def mouseReleaseEvent(self, event): # 若鼠標釋放為雙擊釋放,則不跟蹤鼠標移動 if self.justDoubleClicked: self.justDoubleClicked = False # 若鼠標釋放為單擊釋放,則需要改變跟蹤功能的狀態,如果開啟跟蹤功能的話就跟蹤,不開啟跟蹤功能就不跟蹤 else: # 單擊鼠標 self.setMouseTracking(not self.hasMouseTracking()) if self.hasMouseTracking():self.text = '開啟鼠標跟蹤功能.n' + '請移動一下鼠標!n' + '單擊鼠標可以關閉這個功能' else:self.text = '關閉鼠標跟蹤功能.n' + '單擊鼠標可以開啟這個功能' self.update() ’’’重新實現鼠標移動事件’’’ def mouseMoveEvent(self, event): #如果沒有鼠標雙擊,執行 if not self.justDoubleClicked: # 窗口坐標轉換為屏幕坐標 globalPos = self.mapToGlobal(event.pos()) self.text = '''鼠標位置: 窗口坐標為:QPoint({0}, {1}) 屏幕坐標為:QPoint({2}, {3}) '''.format(event.pos().x(), event.pos().y(), globalPos.x(), globalPos.y()) self.update() ’’’重新實現鼠標雙擊事件’’’ def mouseDoubleClickEvent(self, event): self.justDoubleClicked = True self.text = '你雙擊了鼠標' self.update() ’’’重新實現鍵盤按下事件’’’ def keyPressEvent(self, event): self.key = '' if event.key() == Qt.Key_Home: self.key = 'Home' elif event.key() == Qt.Key_End: self.key = 'End' elif event.key() == Qt.Key_PageUp: if event.modifiers() & Qt.ControlModifier:self.key = 'Ctrl+PageUp' else:self.key = 'PageUp' elif event.key() == Qt.Key_PageDown: if event.modifiers() & Qt.ControlModifier:self.key = 'Ctrl+PageDown' else:self.key = 'PageDown' elif Qt.Key_A <= event.key() <= Qt.Key_Z: if event.modifiers() & Qt.ShiftModifier:self.key = 'Shift+' self.key += event.text() #如果key有字符,不為空,則繪制字符 if self.key: self.key = self.key self.update() #否則就繼續監視這個事件 else: QWidget.keyPressEvent(self, event) ’’’重新實現其他事件,適用于PyQt沒有提供該事件的處理函數的情況,Tab鍵由于涉及焦點切換,不會傳遞給keyPressEvent,因此,需要在這里重新定義。’’’ def event(self, event): #如果有按鍵按下,并且按鍵是tab鍵 if (event.type() == QEvent.KeyPress and event.key() == Qt.Key_Tab): self.key = '在event()中捕獲Tab鍵' self.update() return True return QWidget.event(self, event)if __name__ == '__main__': app = QApplication(sys.argv) form = Widget() form.show() app.exec_()代碼解析

首先是類的建立,建立text和message兩個變量,使用painEvent函數把他們輸出到窗口中

update函數的作用是更新窗口,由于窗口更新過程中會觸發一次paineEvent函數(paintEvent是窗口基類QWidget的內部函數),因此在本例中,update函數的作用等同于paintEvent函數

import sysfrom PyQt5.QtCore import (QEvent, QTimer, Qt)from PyQt5.QtWidgets import (QApplication, QMenu, QWidget)from PyQt5.QtGui import QPainterclass Widget(QWidget): def __init__(self, parent=None): super(Widget, self).__init__(parent) #初始化數據 #鼠標雙擊False self.justDoubleClicked = False #按鍵,輸出文本,提示消息為空 self.key = '' self.text = '' self.message = '' #設置窗口初始大小與位置 self.resize(400, 300) self.move(100, 100) #設置標題 self.setWindowTitle('Events') #定時器1秒后執行槽函數 QTimer.singleShot(1000, self.giveHelp) # 避免窗口大小重繪事件的影響,可以把參數0改變成3000(3秒),然后在運行,就可以明白這行代碼的意思。 def giveHelp(self): self.text = '請點擊這里觸發追蹤鼠標功能' # 重繪事件,也就是觸發paintEvent函數。 self.update()

初始化運行結果如下

python GUI庫圖形界面開發之PyQt5信號與槽事件處理機制詳細介紹與實例解析

然后是重新實現窗口關閉事件與上下文菜單事件,主要影響message標量的結果,paintEvent負責把這個變量在窗口底部輸出

’’’重新實現關閉事件’’’ def closeEvent(self, event): print('Closed') ’’’重新實現上下文菜單事件’’’ def contextMenuEvent(self, event): #實例化菜單,添加子菜單one two并附加快捷鍵功能,關聯槽函數 menu = QMenu(self) oneAction = menu.addAction('&One') twoAction = menu.addAction('&Two') oneAction.triggered.connect(self.one) twoAction.triggered.connect(self.two) #如果message為空,執行 if not self.message: #在菜單中添加一條分割線 menu.addSeparator() #添加自菜單three,關聯槽函數 threeAction = menu.addAction('Thre&e') threeAction.triggered.connect(self.three) #菜單欄出現在鼠標的位置 menu.exec_(event.globalPos()) ’’’上下文菜單槽函數’’’ def one(self): self.message = 'Menu option One' self.update() def two(self): self.message = 'Menu option Two' self.update() def three(self): self.message = 'Menu option Three' self.update()

python GUI庫圖形界面開發之PyQt5信號與槽事件處理機制詳細介紹與實例解析

繪制事件是代碼的核心事件,它的作用是時刻跟隨text和message這兩個變量的信息,并把text內容繪制到窗口的中部,把message的內容繪制到窗口的底部

’’’重新實現繪制事件’’’ def paintEvent(self, event): text = self.text i = text.find('nn') if i >= 0: text = text[0:i] # 若觸發了鍵盤按鈕,則在文本信息中記錄這個按鈕信息。 if self.key: text += 'nn你按下了: {0}'.format(self.key) painter = QPainter(self) painter.setRenderHint(QPainter.TextAntialiasing) # 繪制信息文本的內容 painter.drawText(self.rect(), Qt.AlignCenter, text) # 若消息文本存在則在底部居中繪制消息,5秒鐘后清空消息文本并重繪。 if self.message: #顯示給定坐標處的文本,坐標,對齊方式。文本內容 painter.drawText(self.rect(), Qt.AlignBottom | Qt.AlignHCenter, self.message) #5秒鐘后觸發清空信息的函數,并重新繪制事件 QTimer.singleShot(5000, self.clearMessage) QTimer.singleShot(5000, self.update) ’’’清空消息文本的槽函數’’’ def clearMessage(self): self.message = ''

接下來是調整窗口大小事件

’’’重新實現調整窗口大小事件’’’ def resizeEvent(self, event): self.text = '調整窗口大小為: QSize({0}, {1})'.format( event.size().width(), event.size().height()) self.update()

python GUI庫圖形界面開發之PyQt5信號與槽事件處理機制詳細介紹與實例解析

實現鼠標釋放事件,若為雙擊釋放,則不跟隨鼠標移動,若為單擊釋放,則需要跟隨鼠標移動狀態進行更改,如果開啟跟蹤功能就跟蹤,否則就不跟綜

’’’重新實現鼠標釋放事件’’’ def mouseReleaseEvent(self, event): # 若鼠標釋放為雙擊釋放,則不跟蹤鼠標移動 if self.justDoubleClicked: self.justDoubleClicked = False # 若鼠標釋放為單擊釋放,則需要改變跟蹤功能的狀態,如果開啟跟蹤功能的話就跟蹤,不開啟跟蹤功能就不跟蹤 else: # 單擊鼠標 self.setMouseTracking(not self.hasMouseTracking()) if self.hasMouseTracking():self.text = '開啟鼠標跟蹤功能.n' + '請移動一下鼠標!n' + '單擊鼠標可以關閉這個功能' else:self.text = '關閉鼠標跟蹤功能.n' + '單擊鼠標可以開啟這個功能' self.update()

python GUI庫圖形界面開發之PyQt5信號與槽事件處理機制詳細介紹與實例解析

python GUI庫圖形界面開發之PyQt5信號與槽事件處理機制詳細介紹與實例解析

python GUI庫圖形界面開發之PyQt5信號與槽事件處理機制詳細介紹與實例解析

實現鼠標移動事件

’’’重新實現鼠標移動事件’’’ def mouseMoveEvent(self, event): #如果沒有鼠標雙擊,執行 if not self.justDoubleClicked: # 窗口坐標轉換為屏幕坐標 globalPos = self.mapToGlobal(event.pos()) self.text = '''鼠標位置: 窗口坐標為:QPoint({0}, {1}) 屏幕坐標為:QPoint({2}, {3}) '''.format(event.pos().x(), event.pos().y(), globalPos.x(), globalPos.y()) self.update() ’’’重新實現鼠標雙擊事件’’’ def mouseDoubleClickEvent(self, event): self.justDoubleClicked = True self.text = '你雙擊了鼠標' self.update()

python GUI庫圖形界面開發之PyQt5信號與槽事件處理機制詳細介紹與實例解析

實現鍵盤按下事件

’’’重新實現鍵盤按下事件’’’ def keyPressEvent(self, event): self.key = '' if event.key() == Qt.Key_Home: self.key = 'Home' elif event.key() == Qt.Key_End: self.key = 'End' elif event.key() == Qt.Key_PageUp: if event.modifiers() & Qt.ControlModifier:self.key = 'Ctrl+PageUp' else:self.key = 'PageUp' elif event.key() == Qt.Key_PageDown: if event.modifiers() & Qt.ControlModifier:self.key = 'Ctrl+PageDown' else:self.key = 'PageDown' elif Qt.Key_A <= event.key() <= Qt.Key_Z: if event.modifiers() & Qt.ShiftModifier:self.key = 'Shift+' self.key += event.text() #如果key有字符,不為空,則繪制字符 if self.key: self.key = self.key self.update() #否則就繼續監視這個事件 else: QWidget.keyPressEvent(self, event)

python GUI庫圖形界面開發之PyQt5信號與槽事件處理機制詳細介紹與實例解析

重載tab鍵

’’’重新實現其他事件,適用于PyQt沒有提供該事件的處理函數的情況,Tab鍵由于涉及焦點切換,不會傳遞給keyPressEvent,因此,需要在這里重新定義。’’’ def event(self, event): #如果有按鍵按下,并且按鍵是tab鍵 if (event.type() == QEvent.KeyPress and event.key() == Qt.Key_Tab): self.key = '在event()中捕獲Tab鍵' self.update() return True return QWidget.event(self, event)

python GUI庫圖形界面開發之PyQt5信號與槽事件處理機制詳細介紹與實例解析

過濾器的使用

import sysfrom PyQt5 import Qtfrom PyQt5.QtGui import *from PyQt5.QtCore import *from PyQt5.QtWidgets import *class EventFilter(QDialog): def __init__( self, parent=None ): super(EventFilter, self).__init__(parent) self.setWindowTitle(’事件過濾器’) #實例化并設置四個標簽文本 self.label1 = QLabel(’請點擊’) self.label2 = QLabel(’請點擊’) self.label3 = QLabel(’請點擊’) self.labelState = QLabel(’test’) #加載三個圖片 self.image1 = QImage(’imagescartoon1.ico’) self.image2 = QImage(’imagescartoon2.ico’) self.image3 = QImage(’imagescartoon3.ico’) self.width = 600 self.height = 300 #設置初始大小 self.resize(self.width, self.height) #使用事假過濾器 self.label1.installEventFilter(self) self.label2.installEventFilter(self) self.label3.installEventFilter(self) #設置窗口布局方式并添加控件 layoyt = QGridLayout(self) layoyt.addWidget(self.label1, 500, 0) layoyt.addWidget(self.label2, 500, 1) layoyt.addWidget(self.label3, 500, 2) layoyt.addWidget(self.labelState, 600, 1) def eventFilter( self, watched, event ): #對事件一的處理過濾機制 if watched == self.label1: if event.type() == QEvent.MouseButtonPress:mouseEvent = QMouseEvent(event)if mouseEvent.buttons() == Qt.LeftButton: self.labelState.setText(’按下鼠標左鍵’)elif mouseEvent.buttons() == Qt.MidButton: self.labelState.setText(’按下鼠標中間鍵’)elif mouseEvent.buttons() == Qt.RightButton: self.labelState.setText(’按下鼠標右鍵’)#轉換圖片大小transform=QTransform()transform.scale(0.5,0.5)tmp=self.image1.transformed(transform)self.label1.setPixmap(QPixmap.fromImage(tmp)) if event.type()==QEvent.MouseButtonRelease:self.labelState.setText(’釋放鼠標按鍵’)self.label1.setPixmap(QPixmap.fromImage(self.image1)) return QDialog.eventFilter(self,watched,event)if __name__ == ’__main__’: app=QApplication(sys.argv) dialog=EventFilter() app.installEventFilter(dialog) dialog.show() app.exec_()

運行效果如圖

python GUI庫圖形界面開發之PyQt5信號與槽事件處理機制詳細介紹與實例解析

代碼解析

下面的代碼意思是這個過濾器只對label1的事件進行處理,并且只處理它的鼠標按下事件和鼠標釋放事件

def eventFilter( self, watched, event ): #對事件一的處理過濾機制 if watched == self.label1: if event.type() == QEvent.MouseButtonPress:mouseEvent = QMouseEvent(event)if mouseEvent.buttons() == Qt.LeftButton: self.labelState.setText(’按下鼠標左鍵’)elif mouseEvent.buttons() == Qt.MidButton: self.labelState.setText(’按下鼠標中間鍵’)elif mouseEvent.buttons() == Qt.RightButton: self.labelState.setText(’按下鼠標右鍵’)#轉換圖片大小transform=QTransform()transform.scale(0.5,0.5)tmp=self.image1.transformed(transform)self.label1.setPixmap(QPixmap.fromImage(tmp)) if event.type()==QEvent.MouseButtonRelease:self.labelState.setText(’釋放鼠標按鍵’)self.label1.setPixmap(QPixmap.fromImage(self.image1)) #對于其他的情況會返回系統默認的處理方法 return QDialog.eventFilter(self,watched,event)

一下四行代碼的意思是如果按下這個鼠標鍵,就會對label1裝載的圖片進行縮放一半

#轉換圖片大小transform=QTransform()transform.scale(0.5,0.5)tmp=self.image1.transformed(transform)self.label1.setPixmap(QPixmap.fromImage(tmp))

在QApplication中安裝事件過濾器的使用也非常簡單,只需要修改倆個地方

        #使用事件過濾器

        # self.label1.installEventFilter(self)

        # self.label2.installEventFilter(self)

        # self.label3.installEventFilter(self)

if __name__ == ’__main__’: app=QApplication(sys.argv) dialog=EventFilter() app.installEventFilter(dialog) dialog.show() app.exec_()

運行效果是一樣的

好了,本文主要講解了PyQt5信號與槽事件處理機制詳細介紹與實例解析,更多關于PyQt5信號與槽的知識請查看下面的相關鏈接

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
一区二区精品| 免费成人在线影院| 亚洲天堂免费| 视频一区二区三区入口| 亚洲黄色在线| 久久福利一区| 久久男人天堂| 亚洲国产欧美日本视频| 成人在线观看免费视频| 一本色道久久精品| 久久久久国产| 免费日韩成人| 国产精品久久免费视频| 欧美一区免费| 日韩精品久久理论片| 国产视频亚洲| 亚洲欧美视频一区二区三区| 尹人成人综合网| 国产亚洲高清视频| 影音国产精品| 蜜桃视频欧美| 另类综合日韩欧美亚洲| 欧美日韩va| 国产探花在线精品| 国产精品亚洲综合在线观看| 国产欧美三级| 精品无人区麻豆乱码久久久| 都市激情国产精品| 亚洲天堂av影院| 国产美女高潮在线观看| 国产在线不卡一区二区三区| 日本视频一区二区| 亚洲欧美一级| 免费日韩av片| 久久婷婷国产| 欧美亚洲综合视频| 狠狠躁少妇一区二区三区| а√在线中文在线新版| 国产精品三级| 在线观看亚洲精品福利片| 亚洲欧美日韩国产一区二区| 国产精品精品| 99久久夜色精品国产亚洲1000部| 欧美亚洲激情| 97精品国产| 国产在线视频欧美一区| 国产精品亚洲欧美一级在线| 亚洲三级网站| 亚洲欧美视频| 日本国产亚洲| 国产精品一区二区精品视频观看| 不卡在线一区二区| 激情国产在线| 国产精品白浆| 精品国产欧美日韩一区二区三区| 亚洲精品少妇| 只有精品亚洲| 亚洲精品一二三区区别| 国产 日韩 欧美 综合 一区| 国产精品综合色区在线观看| 亚洲欧美日韩国产一区二区| 国产日韩欧美三区| 精品久久91| 亚洲免费毛片| 丝袜美腿一区二区三区| 日韩精品麻豆| 日韩va欧美va亚洲va久久| 在线成人动漫av| 亚洲欧美久久| 久久福利精品| 免费精品视频在线| 日本三级亚洲精品| 国产午夜一区| 久久精品国产久精国产| 久久99青青| 欧美黑人巨大videos精品| 在线看片福利| 国产视频一区欧美| 国产精品xx| 蜜臀久久99精品久久久画质超高清| 老司机免费视频一区二区| 精品亚洲自拍| 狠狠躁少妇一区二区三区| 欧美特黄一级大片| 成人影视亚洲图片在线| 国产一区成人| 国产精品香蕉| 亚洲综合精品四区| 日韩欧美少妇| 私拍精品福利视频在线一区| 97精品中文字幕| 精品国产精品久久一区免费式| 综合在线一区| 日韩精品国产欧美| 综合国产在线| 日韩综合一区二区三区| 免费黄色成人| 亚洲欧洲另类| 日韩在线麻豆| 国产欧美日韩在线一区二区| 国产精品免费99久久久| 色8久久久久| 国产伦精品一区二区三区视频 | 国产乱人伦精品一区| 亚洲精品系列| 日本精品在线播放| 国产亚洲欧美日韩精品一区二区三区| 国产日韩综合| 亚洲另类av| 免费在线观看一区| 国产一区二区三区四区| 亚洲性色av| 亚洲作爱视频| 亚洲3区在线| 国产激情在线播放| 国产一在线精品一区在线观看| 老鸭窝亚洲一区二区三区| 欧美久久久网站| 日韩天堂在线| 欧美成人aaa| 老司机精品久久| 亚洲天堂资源| 青青国产91久久久久久| 99久久精品国产亚洲精品| 国产精品一区亚洲| 激情综合网五月| 麻豆网站免费在线观看| 国产麻豆精品| 亚洲一级淫片| 久久精品国产大片免费观看| 麻豆中文一区二区| 天海翼精品一区二区三区| 欧美日韩中文字幕一区二区三区| 久久大逼视频| 黄色成人精品网站| 国产字幕视频一区二区| 国产精品九九| 一区二区国产精品| av亚洲一区二区三区| 久久精品国产亚洲一区二区三区| 日韩av一区二| 日韩激情av在线| 美女黄网久久| 美日韩精品视频| 日韩精品一二三四| 欧美日一区二区在线观看| 三级一区在线视频先锋| 亚洲区国产区| 国产亚洲欧美日韩精品一区二区三区| 免费观看在线综合色| 久久午夜视频| 日本va欧美va欧美va精品| 三级欧美韩日大片在线看| 久久都是精品| 免费视频久久| 欧美日韩18| 免费在线观看一区| 日韩欧美一区二区三区免费观看| 伊伊综合在线| 日本欧美在线看| 国产精品网站在线看| 精品国产aⅴ| 亚洲激情五月| 日本免费一区二区视频| 国产激情精品一区二区三区| 成人在线视频免费看| 久久久9色精品国产一区二区三区| 日韩欧美一区二区三区在线视频| 亚洲午夜电影| 国产欧美精品| 国产99久久| 91免费精品国偷自产在线在线| 国产精品不卡| 午夜在线精品偷拍| 国产精品综合色区在线观看| 欧美一区久久久| 日本伊人午夜精品| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 欧美日韩精品免费观看视欧美高清免费大片 | 综合干狼人综合首页| 国产高清一区| 亚洲高清毛片| 亚洲激情黄色| 伊人精品视频| 不卡视频在线| 欧美激情一区| 免费国产亚洲视频| 久久中文字幕av一区二区不卡| 一区二区三区网站| 激情综合婷婷| 日本va欧美va精品发布| 激情综合网五月| 高清在线一区| 欧美一区二区三区久久精品| 欧美.日韩.国产.一区.二区 | 在线日韩av| 老牛国内精品亚洲成av人片| 国产伦精品一区二区三区在线播放| 婷婷亚洲综合| 极品日韩av|