久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術(shù)文章
文章詳情頁

python GUI庫圖形界面開發(fā)之PyQt5信號與槽機(jī)制、自定義信號基礎(chǔ)介紹

瀏覽:3日期:2022-08-06 13:31:12

信號和槽機(jī)制是 QT 的核心機(jī)制,要精通 QT 編程就必須對信號和槽有所了解。信號和槽是一種高級接口,應(yīng)用于對象之間的通信,它是 QT 的核心特性,也是 QT 區(qū)別于其它工具包的重要地方。

在linux、windows等 GUI 工具包中,GUI組件都會注冊回調(diào)函數(shù)用于處理組件所觸發(fā)的動(dòng)作,通常是注冊對應(yīng)的函數(shù)的函數(shù)指針。在之前關(guān)于Button的文章中提到了信號與槽的機(jī)制的使用,通過該機(jī)制可以很好的將組件的信號(如button的clocked、toggled、pressed等)和處理該信號的槽關(guān)聯(lián)起來。通過 信號與槽機(jī)制,能夠讓我們很簡潔和快速的來完成相關(guān)的功能。

信號和槽是用來在對象間傳遞數(shù)據(jù)的方法:當(dāng)一個(gè)特定事件發(fā)生的時(shí)候,signal會被emit出來,slot調(diào)用是用來響應(yīng)相應(yīng)的signal的。Qt中對象已經(jīng)包含了許多預(yù)定義的 signal(基本組件都有各自特有的預(yù)定義的信號),根據(jù)使用的場景我們可以添加新的signal。Qt的對象中已經(jīng)包含了許多預(yù)定義的槽函數(shù),但我們也根據(jù)使用的場景添加新的槽函數(shù)。

信號

當(dāng)對象的狀態(tài)發(fā)生改變的時(shí)候,信號就由該對象發(fā)射 (emit) 出去。當(dāng)一個(gè)信號被發(fā)射(emit)時(shí)候,與其關(guān)聯(lián)的槽函數(shù)被立刻執(zhí)行。其中該對象只負(fù)責(zé)發(fā)送信號,發(fā)射該信號的對象并不知道是那個(gè)對象在接收這個(gè)信號。這樣保證了對象與對象之間的低耦合。

如果存在信號和多個(gè)槽函數(shù)相關(guān)聯(lián)的時(shí)候,當(dāng)信號被發(fā)射時(shí),這些槽的執(zhí)行順序?qū)请S機(jī)的、不確定的。

用于接受信號,而且槽只是普通的對象成員函數(shù)。當(dāng)和槽連接的信號被發(fā)射時(shí),槽會被調(diào)用。一個(gè)槽并不知道是否有任何信號與自己相連接。

信號和槽的綁定

通過調(diào)用 QObject 對象的 connect 函數(shù)來將某個(gè)對象的信號與另外一個(gè)對象的槽函數(shù)相關(guān)聯(lián),這樣當(dāng)發(fā)射者發(fā)射信號時(shí),接收者的槽函數(shù)將被調(diào)用。該函數(shù)的定義如下::

connect(slot[, type=PyQt5.QtCore.Qt.AutoConnection[, no_receiver_check=False]])

Parameters: 

slot ? the slot to connect to, either a Python callable or another bound signal.

type ? the type of the connection to make.

no_receiver_check ? suppress the check that the underlying C++ receiver instance still exists and deliver the signal anyway.

當(dāng)信號與槽沒有必要繼續(xù)保持關(guān)聯(lián)時(shí),我們可以使用 disconnect 函數(shù)來斷開連接。其定義如下:

disconnect([slot])

Parameters: slot ? the optional slot to disconnect from, either a Python callable or another bound signal. If it is omitted then all slots connected to the signal are disconnected.

信號和槽的特點(diǎn)1、一個(gè)信號可以連接到多個(gè)槽;

當(dāng)信號發(fā)出后,槽函數(shù)都會被調(diào)用,但是調(diào)用的順序是隨機(jī)的,不確定的。

self.slider.valueChanged.connect(self.pBar.setValue) 

self.slider.valueChanged.connect(self.lcdNumber.display)

QSlider數(shù)據(jù)的變化同時(shí)綁定在setValue()和display()兩個(gè)槽上。

2、多個(gè)信號可以連接到同一個(gè)槽;

其中任何一個(gè)信號發(fā)出,槽函數(shù)都會被執(zhí)行。

self.buttonOn.clicked.connect(self.showMessage)

self.buttonOff.clicked.connect(self.showMessage)

showMessage()同時(shí)綁定在兩個(gè)button的clicked信號上

3、信號的參數(shù)可以是任何的Python類型;

如list,dict等python獨(dú)有的類型。自定義信號的時(shí)候舉例說明。

4、信號和槽的連接可以被移除;

比如斷開某個(gè)特定信號的關(guān)聯(lián)。

self.buttonOn.clicked.connect(self.showMessage)

5、信號可以和另外一個(gè)信號進(jìn)行關(guān)聯(lián);

第一個(gè)信號發(fā)出后,第二個(gè)信號也同時(shí)發(fā)送。比如關(guān)閉系統(tǒng)的信號發(fā)出之后,同時(shí)會發(fā)出保存數(shù)據(jù)的信號。

代碼示例:

關(guān)于信號和槽的式樣代碼如下:

#-*- coding:utf-8 -*-’’’Signal & Slot’’’__author__ = ’Tony Zhu’import sysfrom PyQt5.QtCore import Qtfrom PyQt5.QtWidgets import (QWidget, QLCDNumber, QSlider,QGridLayout,QLabel,QHBoxLayout, QGroupBox, QVBoxLayout, QApplication,QProgressBar,QPushButton,QMessageBox)class SignalSlot(QWidget): def __init__(self): super(SignalSlot,self).__init__() self.initUI() def initUI(self): self.controlsGroup = QGroupBox('運(yùn)行樣本') self.lcdNumber = QLCDNumber(self) self.slider = QSlider(Qt.Horizontal, self) self.pBar = QProgressBar(self) vbox = QVBoxLayout() vbox.addWidget(self.pBar) vbox.addWidget(self.lcdNumber) vbox.addWidget(self.slider) self.controlsGroup.setLayout(vbox) controlsLayout = QGridLayout() self.label1 = QLabel('保存狀態(tài):') self.saveLabel = QLabel() self.label2 = QLabel('運(yùn)行狀態(tài):') self.runLabel = QLabel() self.buttonSave = QPushButton('保存') self.buttonRun = QPushButton('運(yùn)行') self.buttonStop = QPushButton('停止') self.buttonDisconnect = QPushButton('解除關(guān)聯(lián)') self.buttonConnect = QPushButton('綁定關(guān)聯(lián)') controlsLayout.addWidget(self.label1,0,0) controlsLayout.addWidget(self.saveLabel,0,1) controlsLayout.addWidget(self.label2,1,0) controlsLayout.addWidget(self.runLabel,1,1) controlsLayout.addWidget(self.buttonSave,2,0) controlsLayout.addWidget(self.buttonRun,2,1) controlsLayout.addWidget(self.buttonStop,2,2) controlsLayout.addWidget(self.buttonDisconnect,3,0) controlsLayout.addWidget(self.buttonConnect,3,1) layout = QHBoxLayout() layout.addWidget(self.controlsGroup) layout.addLayout(controlsLayout) self.setLayout(layout) self.buttonRun.clicked.connect(self.buttonSave.clicked) self.slider.valueChanged.connect(self.pBar.setValue) self.slider.valueChanged.connect(self.lcdNumber.display) self.buttonSave.clicked.connect(self.showMessage) self.buttonRun.clicked.connect(self.showMessage) self.buttonDisconnect.clicked.connect(self.unbindConnection) self.buttonConnect.clicked.connect(self.bindConnection) self.buttonStop.clicked.connect(self.stop) self.setGeometry(300, 500, 500, 180) self.setWindowTitle(’信號和槽’) def showMessage(self): if self.sender().text() == '保存': self.saveLabel.setText('Saved') elif self.sender().text() == '運(yùn)行': self.saveLabel.setText('Saved') self.runLabel.setText('Running') def unbindConnection(self): self.slider.valueChanged.disconnect() def bindConnection(self): self.slider.valueChanged.connect(self.pBar.setValue) self.slider.valueChanged.connect(self.lcdNumber.display) def stop(self): self.saveLabel.setText('') self.runLabel.setText('')if __name__ == ’__main__’: app = QApplication(sys.argv) ex = SignalSlot() ex.show() sys.exit(app.exec_())

程序運(yùn)行的結(jié)果:

python GUI庫圖形界面開發(fā)之PyQt5信號與槽機(jī)制、自定義信號基礎(chǔ)介紹

控件說明:

控件類型 控件名稱 作用 QLCDNumber lcdNumber 顯示slider滑動(dòng)之后的數(shù)據(jù) QProgressBar pBar 顯示slider滑動(dòng)之后的數(shù)據(jù)(百分比數(shù)據(jù)) QSlider slider 滑動(dòng)塊調(diào)整數(shù)據(jù) QPushButton buttonSave 在saveLabel顯示保存的狀態(tài)”Saved” QPushButton buttonRun 在runLabel顯示運(yùn)行的狀態(tài)”Running” QPushButton buttonDisconnect 解除slider.valueChanged信號的綁定 QPushButton buttonConnect 連接slider.valueChanged信號的綁定 QPushButton buttonStop 清除saveLabel和runLabel的信息

示例說明:

程序樣本運(yùn)行的界面邏輯,先設(shè)定運(yùn)行的程序樣本數(shù)量,然后先保存后運(yùn)行的邏輯狀態(tài)。通過slider的滑動(dòng)來改變progressBar和LCD的顯示數(shù)據(jù);“保存”按鈕保存運(yùn)行的樣本;“運(yùn)行”按鈕運(yùn)行程序樣本;“解除關(guān)聯(lián)”解除slider.valueChanged信號的綁定,此時(shí)slider的滑動(dòng),不會改變progressBar和LCD的顯示

示例說明:

L22~30:

self.controlsGroup = QGroupBox('運(yùn)行樣本')self.lcdNumber = QLCDNumber(self)self.slider = QSlider(Qt.Horizontal, self)self.pBar = QProgressBar(self)vbox = QVBoxLayout()vbox.addWidget(self.pBar)vbox.addWidget(self.lcdNumber)vbox.addWidget(self.slider)self.controlsGroup.setLayout(vbox)

實(shí)例化一個(gè)QGroupBox,在其中添加QSlider,QProgressBar,QLCDNumber控件。

L32~41:

controlsLayout = QGridLayout()self.label1 = QLabel('保存狀態(tài):').....self.buttonDisconnect = QPushButton('解除關(guān)聯(lián)')self.buttonConnect = QPushButton('綁定關(guān)聯(lián)')

實(shí)例化,界面中右半部分的控件。

L58~65:

self.buttonRun.clicked.connect(self.buttonSave.clicked)self.slider.valueChanged.connect(self.pBar.setValue)self.slider.valueChanged.connect(self.lcdNumber.display)self.buttonSave.clicked.connect(self.showMessage)self.buttonRun.clicked.connect(self.showMessage)self.buttonDisconnect.clicked.connect(self.unbindConnection)self.buttonConnect.clicked.connect(self.bindConnection)self.buttonStop.clicked.connect(self.stop)signal和slot進(jìn)行綁定。1、一個(gè)信號綁定多個(gè)槽:

self.slider.valueChanged.connect(self.pBar.setValue)

self.slider.valueChanged.connect(self.lcdNumber.display)

slider控件的valueChanged信號,同時(shí)與QProgressBar的setValue(),QLCDNumber的display()槽函數(shù)綁定,當(dāng)valueChanged信號觸發(fā)的時(shí)候,這兩個(gè)槽函數(shù)均會被調(diào)用。

2、多個(gè)信號綁定到一個(gè)槽:

self.buttonSave.clicked.connect(self.showMessage)

self.buttonRun.clicked.connect(self.showMessage)

buttonSave和buttonRun這兩個(gè)對象的clicked信號,同時(shí)綁定到showMessage()這個(gè)槽函數(shù)。無論哪一個(gè)信號被觸發(fā),showMessage()這個(gè)槽函數(shù)均會被調(diào)用。

3、信號和槽的連接可以被移除:

self.buttonDisconnect.clicked.connect(self.unbindConnection)

當(dāng)buttonDisconnect信號觸發(fā)之后,與其關(guān)聯(lián)的槽函數(shù)unbindConnection()中就會執(zhí)行disconnect()方法,如下:

def unbindConnection(self):self.slider.valueChanged.disconnect()

其中執(zhí)行disconnect()的時(shí)候可以指定解除與某個(gè)特定的slot槽的關(guān)聯(lián),比如self.slider.valueChanged.disconnect(self.pBar.setValue),此時(shí)解除和QProgressBar的setValue()的關(guān)聯(lián);或者不指定,在不指定slot的場景下這樣將解除和這個(gè)信號所有關(guān)聯(lián)的槽。

4、信號與信號的關(guān)聯(lián):

self.buttonRun.clicked.connect(self.buttonSave.clicked)

在示例說明中提到,在運(yùn)行之前要對樣本進(jìn)行保存,所以為了保證運(yùn)行的時(shí)候執(zhí)行了保存的操作,所以將buttonRun.clicked信號和buttonSave.clicked信號關(guān)聯(lián)起來。

示例中在沒有執(zhí)行“保存”(buttonSave)的時(shí)候,執(zhí)行“運(yùn)行”(buttonRun),此時(shí)由于兩個(gè)對象的clicked信號已經(jīng)關(guān)聯(lián),所以buttonSave的clicked同樣會執(zhí)行。

PyQt5自定義信號

PyQt5已經(jīng)自動(dòng)定義了很多QT內(nèi)建的信號。但是在實(shí)際的使用中為了靈活使用信號與槽機(jī)制,我們可以根據(jù)需要自定義signal。可以使用pyqtSignal()方法定義新的信號,新的信號作為類的屬性。

自定義signal說明:

pyqtSignal()方法原型(PyQt官網(wǎng)的定義):

PyQt5.QtCore.pyqtSignal(types[, name[, revision=0[, arguments=[]]]])

Create one or more overloaded unbound signals as a class attribute.

Parameters: 

types ? the types that define the C++ signature of the signal. Each type may be a Python type object or a string that is the name of a C++ type. Alternatively each may be a sequence of type arguments. In this case each sequence defines the signature of a different signal overload. The first overload will be the default.

name ? the name of the signal. If it is omitted then the name of the class attribute is used. This may only be given as a keyword argument.

revision ? the revision of the signal that is exported to QML. This may only be given as a keyword argument.

arguments ? the sequence of the names of the signal’s arguments that is exported to QML. This may only be given as a keyword argument.

Return type:    an unbound signal

新的信號應(yīng)該定義在QObject的子類中。新的信號必須作為定義類的一部分,不允許將信號作為類的屬性在類定義之后通過動(dòng)態(tài)的方式進(jìn)行添加。通過這種方式新的信號才能自動(dòng)的添加到QMetaObject類中。這就意味這新定義的信號將會出現(xiàn)在Qt Designer,并且可以通過QMetaObject API實(shí)現(xiàn)內(nèi)省。

通過下面的例子,了解一下關(guān)于signal的定義:

from PyQt5.QtCore import QObject, pyqtSignalclass NewSignal(QObject): # 定義了一個(gè)“closed”信號,該信號沒有參數(shù)據(jù) closed= pyqtSignal() # 定義了一個(gè)'range_changed'信號,該信號有兩個(gè)int類型的參數(shù) range_changed = pyqtSignal(int, int, name=’rangeChanged’)

自定義信號的發(fā)射,通過emit()方法類實(shí)現(xiàn),具體參見該函數(shù)的原型:

emit(*args)

Parameters: args ? the optional sequence of arguments to pass to any connected slots.

通過下面的例子,了解一下關(guān)于emit()的使用:

from PyQt5.QtCore import QObject, pyqtSignalclass NewSignal(QObject): # 一個(gè)valueChanged的信號,該信號沒有參數(shù). valueChanged = pyqtSignal() def connect_and_emit_valueChanged(self): # 綁定信號和槽函數(shù) self.valueChanged.connect(self.handle_valueChanged) # 發(fā)射信號. self.trigger.emit() def handle_valueChanged(self): print('trigger signal received')

示例說明:

自定義信號的一般流程如下:

定義信號 定義槽函數(shù) 綁定信號和槽 發(fā)射信號

通過代碼示例來了解一下信號的自定義過程:

#-*- coding:utf-8 -*-’’’defined Signal’’’__author__ = ’Tony Zhu’import sysfrom PyQt5.QtCore import pyqtSignal, QObject, Qt, pyqtSlotfrom PyQt5.QtWidgets import QWidget, QApplication, QGroupBox, QPushButton, QLabel, QCheckBox, QSpinBox, QHBoxLayout, QComboBox, QGridLayoutclass SignalEmit(QWidget): helpSignal = pyqtSignal(str) printSignal = pyqtSignal(list) #聲明一個(gè)多重載版本的信號,包括了一個(gè)帶int和str類型參數(shù)的信號,以及帶str參數(shù)的信號 previewSignal = pyqtSignal([int,str],[str]) def __init__(self): super().__init__()self.initUI() def initUI(self): self.creatContorls('打印控制:') self.creatResult('操作結(jié)果:') layout = QHBoxLayout() layout.addWidget(self.controlsGroup) layout.addWidget(self.resultGroup) self.setLayout(layout) self.helpSignal.connect(self.showHelpMessage) self.printSignal.connect(self.printPaper) self.previewSignal[str].connect(self.previewPaper) self.previewSignal[int,str].connect(self.previewPaperWithArgs) self.printButton.clicked.connect(self.emitPrintSignal) self.previewButton.clicked.connect(self.emitPreviewSignal) self.setGeometry(300, 300, 290, 150) self.setWindowTitle(’defined signal’) self.show() def creatContorls(self,title): self.controlsGroup = QGroupBox(title) self.printButton = QPushButton('打印') self.previewButton = QPushButton('預(yù)覽') numberLabel = QLabel('打印份數(shù):') pageLabel = QLabel('紙張類型:') self.previewStatus = QCheckBox('全屏預(yù)覽') self.numberSpinBox = QSpinBox() self.numberSpinBox.setRange(1, 100) self.styleCombo = QComboBox(self) self.styleCombo.addItem('A4') self.styleCombo.addItem('A5') controlsLayout = QGridLayout() controlsLayout.addWidget(numberLabel, 0, 0) controlsLayout.addWidget(self.numberSpinBox, 0, 1) controlsLayout.addWidget(pageLabel, 0, 2) controlsLayout.addWidget(self.styleCombo, 0, 3) controlsLayout.addWidget(self.printButton, 0, 4) controlsLayout.addWidget(self.previewStatus, 3, 0) controlsLayout.addWidget(self.previewButton, 3, 1) self.controlsGroup.setLayout(controlsLayout) def creatResult(self,title): self.resultGroup = QGroupBox(title) self.resultLabel = QLabel('') layout = QHBoxLayout() layout.addWidget(self.resultLabel) self.resultGroup.setLayout(layout) def emitPreviewSignal(self): if self.previewStatus.isChecked() == True: self.previewSignal[int,str].emit(1080,' Full Screen') elif self.previewStatus.isChecked() == False: self.previewSignal[str].emit('Preview') def emitPrintSignal(self): pList = [] pList.append(self.numberSpinBox.value ()) pList.append(self.styleCombo.currentText()) self.printSignal.emit(pList) def printPaper(self,list): self.resultLabel.setText('Print: '+'份數(shù):'+ str(list[0]) +' 紙張:'+str(list[1])) def previewPaperWithArgs(self,style,text): self.resultLabel.setText(str(style)+text) def previewPaper(self,text): self.resultLabel.setText(text) def keyPressEvent(self, event): if event.key() == Qt.Key_F1: self.helpSignal.emit('help message') def showHelpMessage(self,message): self.resultLabel.setText(message) #self.statusBar().showMessage(message)if __name__ == ’__main__’: app = QApplication(sys.argv) dispatch = SignalEmit() sys.exit(app.exec_())

運(yùn)行該函數(shù)之后的效果如下:

python GUI庫圖形界面開發(fā)之PyQt5信號與槽機(jī)制、自定義信號基礎(chǔ)介紹

示例說明:

通過一個(gè)模擬打印的界面來詳細(xì)說明一下關(guān)于信號的自定義,在打印的時(shí)候可以設(shè)定打印的分?jǐn)?shù),紙張類型,觸發(fā)“打印”按鈕之后,將執(zhí)行結(jié)果顯示到右側(cè);通過全屏預(yù)覽QCheckBox來選擇是否通過全屏模式進(jìn)行預(yù)覽,將執(zhí)行結(jié)果顯示到右側(cè)。

通過點(diǎn)擊F1快捷鍵,可以顯示helpMessage信息。

代碼分析:

L12~15:

helpSignal = pyqtSignal(str)printSignal = pyqtSignal(list)#聲明一個(gè)多重載版本的信號,包括了一個(gè)帶int和str類型參數(shù)的信號,以及帶str參數(shù)的信號previewSignal = pyqtSignal([int,str],[str])

通過pyqtSignal()定義了三個(gè)信號,helpSignal ,printSignal ,previewSignal 。其中:

helpSignal 為str參數(shù)類型的信號; printSignal 為list參數(shù)類型的信號; previewSignal為一個(gè)多重載版本的信號,包括了一個(gè)帶int和str類型參數(shù)的信號,以及str類行的參數(shù)。

L31~36:

self.helpSignal.connect(self.showHelpMessage)

self.printSignal.connect(self.printPaper)

self.previewSignal[str].connect(self.previewPaper) 

self.previewSignal[int,str].connect(self.previewPaperWithArgs)

self.printButton.clicked.connect(self.emitPrintSignal)

self.previewButton.clicked.connect(self.emitPreviewSignal)

綁定信號和槽;著重說明一下多重載版本的信號的綁定,previewSignal有兩個(gè)版本previewSignal(str),previewSignal(int,str)。由于存在兩個(gè)版本,從因此在綁定的時(shí)候需要顯式的指定信號和槽的綁定關(guān)系。

具體如下:

self.previewSignal[str].connect(self.previewPaper)

self.previewSignal[int,str].connect(self.previewPaperWithArgs)

其中[str]參數(shù)的previewSignal信號綁定previewPaper();[int,str]的previewSignal信號綁定previewPaperWithArgs()

L72~76:

def emitPreviewSignal(self): if self.previewStatus.isChecked() == True: self.previewSignal[int,str].emit(1080,' Full Screen') elif self.previewStatus.isChecked() == False: self.previewSignal[str].emit('Preview')

多重載版本的信號的發(fā)射也需要制定對應(yīng)發(fā)射的版本,類似同信號的版定。

L78~82:

def emitPrintSignal(self): pList = [] pList.append(self.numberSpinBox.value ()) pList.append(self.styleCombo.currentText()) self.printSignal.emit(pList)

如代碼中所示,在信號發(fā)射的時(shí)候可以傳遞python數(shù)據(jù)類型的參數(shù),在本例中傳遞list類型的參數(shù)pList.

L93~96:

def keyPressEvent(self, event): if event.key() == Qt.Key_F1: self.helpSignal.emit('help message')

通過復(fù)寫keyPressEvent()方法,將F1快捷鍵進(jìn)行功能的拓展。在windows的大部分應(yīng)用,我們都會使用一些快捷鍵來快速的完成某些特定的功能。比如F1鍵,會快速調(diào)出幫助界面。那我們就可以復(fù)寫keyPressEvent()方法來模擬發(fā)送所需的信號,來完成我們的對應(yīng)任務(wù).

注意事項(xiàng):

自定義的信號在init()函數(shù)之前定義; 自定義型號可以傳遞,str、int、list、object、float、tuple、dict等很多類型的參數(shù); 注意signal和slot的調(diào)用邏輯,避免signal和slot之間出現(xiàn)死循環(huán)。如在slot方法中繼續(xù)發(fā)射該信號;

更多關(guān)于python GUI庫圖形界面開發(fā)之PyQt5文章請查看下面的相關(guān)鏈接

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 日本人做爰大片免费观看一老师 | 夜夜操操 | 99精品99| 欧美日韩国产一区二区在线观看 | 久久福利电影 | 激情999| 亚洲综合大片69999 | jizz中国zz女人18高潮 | 成人精品鲁一区一区二区 | 一区二区三区日韩 | 精品久久久久久久久久久久 | 日韩成人在线网 | 日日干天天操 | www97影院 | 天天插天天操天天干 | 91日韩欧美| 久久人人爽人人爽人人片av高清 | 国产精品不卡视频 | 欧美精品1 | 亚洲成人精品久久 | 91精品欧美久久久久久久 | a级毛片免费高清视频 | 欧美寡妇偷汉性猛交 | 国产传媒在线 | 一区二区成人网 | av网站免费| 欧美日韩国产欧美 | 日本在线视频一区二区 | 亚洲毛片在线观看 | 欧美日韩综合视频 | 日本精品一区二区三区视频 | 日韩精品一区二区三区中文在线 | 国产精品免费av | 成人精品视频一区二区三区 | 国产二区精品 | 99久久免费精品国产男女性高好 | 久久av网 | 国产精品一二三区 | 国产91视频在线观看 | 伊人网站| 天天躁日日躁性色aⅴ电影 免费在线观看成年人视频 国产欧美精品 | 欧美午夜一区二区福利视频 | 操久在线 | 综合久久99 | 三级日韩 | 亚洲女人天堂网 | aa毛片| 伊人婷婷 | 亚洲精品乱码久久久久久久 | 色综合天天综合网国产成人网 | 婷婷激情在线 | 久久久久黄 | 国产在线乱 | 国产欧美一区二区 | 一区二区三区在线播放 | 中文字幕影院 | 日韩激情免费视频 | 啪一啪| 精品在线二区 | www.com久久| 亚洲免费视频在线观看 | 日韩精品影院 | 亚洲成人一区二区 | 欧美视频在线一区 | 蜜臀久久99精品久久久无需会员 | 久久精品久久久久久 | 一区二区三区 在线 | 国产性×xxx盗摄xxxx | 国产精品久久久久久久久久久久久 | 精品国产乱码久久久久久1区二区 | 国产精品久久久久久久久久妞妞 | 嫩草影院永久入口 | 免费看片一区二区三区 | 亚洲卡一 | 久草在线 | 欧美日一区二区 | 国产精品www | 久久久久久婷婷 | 在线观看免费av网站 | 成人九色 | 亚洲 欧美 另类 综合 偷拍 | 国产不卡免费视频 | 久久精品91久久久久久再现 | 中文字幕乱码亚洲精品一区 | 国产精品久久久久永久免费观看 | 国产69久久| 91精品久久久久久久久中文字幕 | 亚洲人人艹 | 亚洲成av人片一区二区梦乃 | 国产精品日韩在线观看 | 99久久精品国产一区二区成人 | 看毛片网 | 久久久久亚洲精品 | 日韩专区中文字幕 | 国产精品美女www爽爽爽动态图 | 天天干天天操 | 狠狠操狠狠干 | 欧州一区二区三区 | 日韩一区欧美 | 国产日韩欧美一区二区 | 国产精品99久久久久久久vr | 91婷婷射 | 国产精品一区二区在线 | 久久综合一区二区三区 | 精品综合久久久 | 久草精品在线观看 | 日日噜 | 午夜在线| 国产精品国产自产拍高清 | 国产精品久久免费看 | 久久蜜桃精品一区二区三区综合网 | 亚洲一区二区三区视频 | 日韩精品一区二区三区在线观看 | 99免费观看| 在线观看91精品国产入口 | 一级欧美| 蜜臀91精品国产高清在线观看 | 免费视频爱爱太爽了 | 久久精品一区 | 国产精品一区二区三区在线看 | 日韩一区二区成人 | 女人夜夜春高潮爽a∨片传媒 | 人人插| 精品久久久久久久久久久久久久 | 超碰人人在线 | 亚洲精品一区二区三区在线 | 国产精品国产精品国产专区不片 | 国产中文在线 | 国产一区 | 日韩91| 欧美一区二区三区 | 国产一级二级毛片 | 欧美卡一卡二 | 国产精品中文字幕在线 | 欧美久久久久久久久久伊人 | 蜜桃精品久久久久久久免费影院 | 99这里只有精品视频 | 91视频日韩 | 久操不卡 | 永久91嫩草亚洲精品人人 | 欧美一区精品 | 中文字幕欧美激情 | 亚洲中午字幕 | 欧美成人精品一区 | 欧美日韩在线精品 | 国产午夜久久久久 | 欧美久久视频 | 久久久精选 | 国产91在线 | 亚洲 | 欧美精品久久久 | 国产精品极品美女在线观看免费 | 天天干人人插 | 91精品久久久久久 | 日韩欧美国产一区二区三区 | 精品国产乱码久久久久久1区2区 | 精品日韩一区二区三区 | 男人阁久久| 日韩精品视频在线观看免费 | 国产精品久久久久久久久久久久久久 | 99在线视频精品 | 国产午夜一区二区三区 | 成人国产精品久久久 | 亚洲精品成人a8198a | 国产精品二区一区二区aⅴ污介绍 | 久久91视频 | 亚洲欧美福利视频 | 欧美一级免费 | 每日更新av | 免费视频久久久久 | 久久六月| 国产网站视频 | 国产视频三区 | 亚洲成人基地 | 国产一级特黄aaa大片 | 欧美激情高清 | 日产精品久久 | 成人免费小视频 | 欧美在线影院 | 国变精品美女久久久久av爽 | 中文字幕视频一区 | 欧美一区二区三区免费观看视频 | 美女中文字幕视频 | 日韩五码在线 | 国产一区二区在线播放 | 男女黄色免费网站 | 美女黄在线观看 | 色精品视频 | 亚洲精品一区中文字幕乱码 | 三级国产网站 | 欧美日韩在线综合 | 国产精品久久久久9999赢消 | 国产精品视频一区二区三区不卡 | 国产亚洲网站 | 日韩精品久久久久 | 久久综合热 | 国产成人精品高清久久 | 欧美一级片在线 | 福利视频一区二区三区 | 国产精品视频 | 午夜久久久久 | 国产 日韩 欧美 中文 在线播放 | 日韩精品一区二区三区在线观看 | 好看的一级毛片 | 成人爽a毛片一区二区免费 美女高潮久久久 | 国产免费一区二区 | 91精品国产综合久久福利软件 | 99久久久久久| 在线亚洲一区 | 在线看一区二区 | 亚洲成人在线视频网站 | 精品午夜久久久 | 国产欧美日韩综合精品 | 夜夜av| 黄色影片网址 | 91天堂在线观看 | 亚洲精品国产第一综合99久久 | 国产成年人小视频 | 久久大陆 | 国产猛男猛女超爽免费视频网站 | 精品日韩一区 | 亚洲精品一区国产精品 | 在线免费国产视频 | 色悠悠久久 | 日韩中文字幕在线视频 | 51ⅴ精品国产91久久久久久 | 国产精品无码久久久久 | 91精品国产色综合久久不卡98 | av日韩一区 | 欧美1区| 99精品99| 欧美日韩中文在线 | 91精品亚洲 | 欧美 日韩 国产 一区 | 不卡黄色| 一级a性色生活片久久毛片明星 | 色爱区综合五月激情 | 亚洲福利| 亚洲精品久久 | 中文字幕久久精品 | 9久久精品 | 欧美一区二区三区视频 | 精品视频在线播放 | 亚洲成人精品 | 日韩欧美在线视频观看 | 久久天堂 | 日韩福利一区 | 国产99久 | 91色视频在线观看 | 欧美精品一区二区三区在线 | 亚洲国产精品一区二区久久 | 中文字幕乱码一区二区三区 | 免费观看日韩一级片 | 午夜三区| 欧美另类久久 | 亚洲精品一区二区三区精华液 | 狠狠狠狠狠狠干 | av在线成人 | 另类五月天 | 激情久久av一区av二区av三区 | 久久一区二区三区四区五区 | 国内精品久久久久久影视8 91一区二区在线观看 | 黄色电影在线免费观看 | 成人免费毛片嘿嘿连载视频 | 伊人网站在线 | 国产精品亚洲成人 | 亚洲精品视频一区 | 欧美午夜在线 | 91精品中文字幕一区二区三区 | 欧美久久久久久久久久久久 | www.一区 | 国产精品久久久久久久美男 | 免费在线观看毛片网站 | 久久在线视频 | 久久人| 久久久www成人免费无遮挡大片 | 欧美激情精品久久久久久免费 | 中字一区| 在线看国产 | 国产精品1区2区 | 日本在线一二 | 日本一级在线观看 | 最近免费中文字幕在线视频2 | 成人免费视屏 | 福利视频一区 | 国产精品久久国产精麻豆99网站 | 亚洲精品福利 | 亚洲精品在线看 | 久久爱www. | 日韩一区二区精品 | 亚洲欧美一区二区三区在线 | 99精品欧美一区二区三区 | 日韩不卡一区 | 久久久国产一区二区三区 | 成人久久久久爱 | 天天插天天操 | 午夜影院在线观看免费 | 久久久久综合狠狠综合日本高清 | 午夜男人网| 午夜激情在线免费观看 | 欧美日韩一区二区视频在线观看 | 久久免费看 | 最近最新中文字幕 | 国产黄色大片 | 亚洲精品久久久久久久久久久 | 欧美一区二区三区在线 | 欧美一级在线 | 久久综合久久久 | 亚洲最黄网站 | 久久国产一区二区 | 一区二区三区国产好 | 国户精品久久久久久久久久久不卡 | 97久久精品人人做人人爽50路 | 欧美久久一区二区三区 | 亚洲国产高清视频 | 97综合色| 精品一二三区 | 青青久久久 | 色婷婷综合久久久中字幕精品久久 | 成人免费一区二区三区视频网站 | 91av免费 | 亚洲一区二区三区日韩 | 欧美激情专区 | 日日夜夜天天 | 免费中文字幕 | 一区二区精品视频 | av在线一区二区三区 | 国产综合精品一区二区三区 | 久久精品一区二区三区不卡牛牛 | 亚洲午夜免费视频 | 毛片av在线 | 亚洲 欧美 日韩在线 | 国产日韩欧美综合 | 91精品国产91久久综合桃花 | 欧美精品一区二区三区在线 | 国产成人av网站 | 91性高湖久久久久久久久_久久99 | 日本中文一区二区 | 一区二区日韩精品 | 亚洲精品一二区 | 波多野结衣一区二 | 操操日| 876av国产精品电影 | 国产97久久 | 日本中文字幕一区二区 | 久久成人精品 | 一区二区三区四区在线视频 | 久久99国产精品 | 红色av社区 | 超碰最新网址 | 亚洲欧美国产毛片在线 | 国产精品日韩 | 欧美一区亚洲二区 | 欧美日韩精品一区 | 色综合久久久久综合99 | 欧美日韩视频在线第一区 | 日韩国产 | 精品久久久久久久久久久久 | 男人天堂亚洲天堂 | 成人免费视频观看视频 | 美女超碰| 亚洲视频一区在线 | 一级黄色毛片 | 国产日韩高清在线 | 欧美三级网址 | 一区二区三区四区不卡视频 | 波多野结衣av中文字幕 | 国产91富婆养生按摩会所 | 国产一区二区精品 | 中文字幕在线视频免费播放 | 久久久久亚洲精品 | 国产欧美日韩综合精品一区二区 | 久久人人网 | av手机在线播放 | 国产91对白叫床清晰播放 | 狠狠艹av | 午夜黄色影院 | 在线观看欧美成人 | 国产免费av大片 | 午夜国产羞羞视频免费网站 | 午夜视频 | 狠狠躁日日躁夜夜躁东南亚 | 久久不射电影网 | 国产色播av在线 | 久久国产精彩视频 | 久久久久国产亚洲日本 | 欧美一区二区三 | 国产免费拔擦拔擦8x高清在线人 | 久久一级 | 欧美 日韩 国产 成人 在线 | 成人免费网站www网站高清 | av免费网站 | 91精品国产综合久久婷婷香蕉 | 羞羞视频在线网站观看 | 日韩精品专区在线影院重磅 | 一区二区成人在线 | 做a视频免费观看 | 欧美色综合天天久久综合精品 | 久久九九视频 | 毛片99| 成人影院在线 | 成人精品在线视频 | 午夜男人视频 | av午夜电影 | 夸克满天星在线观看 | 精品亚洲国产成av人片传媒 | 日韩 国产 在线 | 色婷婷亚洲一区二区三区 | 午夜草民福利电影 | 日韩在线观看三区 | 黄色毛片在线看 | 精品日韩欧美一区二区在线播放 | 国产精品一区二区三区在线 | 国产欧美日韩 | 日摸夜操| 欧美日韩在线视频一区 | 久久999 | 成人av在线网 | 91亚洲高清 | 久久精品一区二区三区四区 | 自拍偷拍在线视频 | 精品av | 久久国产精品视频 | 中文字幕日韩一区二区不卡 | 久久中文字幕一区 | 久久久久久9| 国产在线一级片 | 国产精品久久久久久久久久久新郎 | 欧洲精品乱码久久久久蜜桃 | 日韩在线观看网站 | 天天干天天操 | 天天射美女 | 欧美一区二区三区在线观看视频 | 亚洲成人中文字幕 | 91av爱爱| 色噜噜在线| 99热在线播放 | 黄色一级毛片 | 欧美精品色 | 五月天婷婷色综合 | 日韩激情视频一区二区 | 中文字幕自拍偷拍 | 久热伊人 | 在线欧美亚洲 | 成人午夜在线 | 性色av一区二区三区免费看开蚌 | 久久噜噜噜精品国产亚洲综合 | 国产真实精品久久二三区 | 亚洲视频在线观看 | 国产午夜精品一区二区三区 | 亚洲一区中文字幕在线观看 | 在线精品亚洲欧美日韩国产 | 一区二区三区国产精品 | 亚洲综合欧美日韩 | 亚洲精品午夜 | 国产成人一区 | 国产精品国产成人国产三级 | 国产一区二区三区网站 | h视频免费看| 伊人狠狠干| 欧美在线网站 | 中文字字幕在线观看 | 精品欧美激情在线观看 | 91精品国产乱码久久久久久 | 久热精品视频 | 国产精品欧美一区二区三区 | 欧美精品成人在线视频 | 亚洲综合区 | 伊人久久精品久久亚洲一区 | 亚洲三级在线看 | 欧洲毛片基地 | 欧美精品一二三 | 欧美一区不卡 | 中文字幕亚洲精品 | 欧美一级播放 | 国产亚洲精品精品国产亚洲综合 | 男人的天堂视频网站 | 亚洲精品一区二区三区蜜桃久 | 久久精品久久久久久久久久久久久 | 一二三区av | 亚洲午夜av | 男女视频在线观看 | 国内精品久久久久久中文字幕 | 色综合一区| 国产精品视频一区二区三区 | 国产一级片 | 国产极品视频在线观看 | 欧美日本精品 | 免费看片91| 亚洲精品天堂 | 国产乱码精品一区二区三区五月婷 | 久久精品性视频 | 欧美伦理一区二区三区 | 久久麻豆 | 伊人久久精品久久亚洲一区 | 欧美综合一区二区三区 | 欧美精产国品一二三区 | 日韩福利在线 | 日韩中文字幕在线免费 | 99re在线观看 | 国产精品久久久久国产a级 日韩在线二区 | 欧洲一区二区三区 | 精品美女久久久 | 欧美簧片在线 | 欧洲一区二区三区 | 在线成人av | 日韩一区二区三区在线观看 | 亚洲欧美日韩国产综合 | 国产成人精品999在线观看 | 国产视频1 | 91精品国产91久久久久久吃药 | 夜夜视频| 国产色99精品9i | 午夜激情影院 | 亚洲高清一区二区三区 | 午夜电影在线看 | 人成亚洲 | av中文字幕在线播放 | 精品视频在线观看 | 欧美激情综合色综合啪啪五月 | 水卜樱一区二区av | 91视频国内| 精品1区 | 一区免费观看 | 中文字幕在线永久在线视频 | 97国产精品视频人人做人人爱 | 国产精品久久久久久亚洲调教 | 视频一区中文字幕 | 欧美黄色一区 | 成人免费在线视频 | 亚洲精品视频在线看 | 国产一区二区精品 | 欧产日产国产一区 | 精品一区二区视频 | 国产精品精品视频一区二区三区 | 成人中文视频 | 天天天天综合 | 国产区在线 | 精品国偷自产在线 | 91激情在线 | 欧美日韩第一 | 免费大片黄在线观看 | 91伊人| 日韩av在线中文字幕 | 在线一区观看 | 国产免费av在线 | 中文字幕成人av | 日韩激情网 | 免费av一区 | 精品欧美一区二区在线观看视频 | 毛片黄片视频 | 亚洲一区二区福利 | 欧美偷偷操 | 三级成人在线 | 日韩爱爱免费视频 | 四虎久久精品 | 欧美精品在线一区 | 91精品国产乱码久久久久久久久 | 国产日韩视频 | baoyu133. con永久免费视频 | 黄网站免费在线观看 | 狠狠综合| 久久久久久黄 | 九色一区 | 亚洲欧美自拍视频 | 欧美成人综合视频 | 噜噜噜在线观看免费视频日本 | 在线观看91精品国产入口 | 国产美女精品视频免费观看 | 国产伊人一区 | 亚洲国产成人精品女人 | 久草网站 | 中文在线观看www | 精品一区二区三区蜜桃 | 91久久夜色精品国产网站 | 综合久久综合 | 国产98色在线 | 日韩 | 一区二区三区国产视频 | 一二三四在线视频观看社区 | 四虎成人永久 | 剑来高清在线观看 | 国产98色在线 | 日韩 | 欧美色性 | 午夜视频 | 日本色站 | 亚洲国产一区二区三区四区 | 一区二区三区精品视频免费看 | 久草色视频在线观看 | 欧美日韩视频在线第一区 | 成人午夜视频在线观看 | 中文字幕精品一区二区三区精品 | 日韩精品在线播放 | 国产精品污www在线观看 | 一级片在线免费看 | 一级久久久久 | 日本涩涩网站 | 美女久久久| 色图综合| 亚洲一区二区三区高清 | 国产精品爱久久久久久久 | 成人午夜免费网站 | 日本不卡一区二区三区在线观看 | 国产精品久久久久久久久免费软件 | 国产一级免费在线 | 色悠久久久 | 国产中文字幕在线播放 | 中文日韩在线 | 天天干天天谢 | 亚洲av一级毛片 | 在线观看av片 | 久久av一区二区三区 | 中文字幕av一区二区 | 91久久精品日日躁夜夜躁欧美 | 久久精品免费电影 | 91蜜桃视频| 亚洲精品乱码久久久久久蜜桃不爽 |