青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Cpper
C/C++高級工程師 Android高級軟件工程師 IT集成工程師 音頻工程師 熟悉c,c++,java,c#,py,js,asp等多種語言 程序猿

static QObject* cpp_qobject_singletontype_provider(QQmlEngine* engine,QJSEngine* scriptEngine)
{
    Q_UNUSED(engine)
    Q_UNUSED(scriptEngine)
    return cppobject;
}

qmlRegisterSingletonType<CppObject>("cppobject", 1, 0, "CppObject",cppobject_qobject_singletontype_provider);
posted @ 2019-08-16 12:14 ccsdu2009 閱讀(638) | 評論 (0)編輯 收藏
 
    auto box = new QVBoxLayout();
    qml = new QQuickWidget();
    setLayout(box);

    qml->setResizeMode(QQuickWidget::SizeRootObjectToView);
    qml->setClearColor(Qt::gray);

    QMLObjectInterface* face = new QMLObjectInterface(this);
    qml->engine()->rootContext()->setContextProperty("cplusplusObject",face);

    qml->setSource(QUrl("QML.qml"));
    foreach(auto error, qml->errors())
        qDebug() << "error:" << error;

    auto object = qml->rootObject();
    object->setProperty("width",480);
   
    auto items = object->findChildren<QQuickItem*>("button");
   
    if (!items.isEmpty())
        items[0]->setProperty("text",QStringLiteral("按鍵"));
 

    box->addWidget(qml);
QML
import QtQuick 2.11
import QtQuick.Controls 2.1
import QtQuick.Controls.Styles 1.4
import QtQuick.Layouts 1.3
import QtQuick.Window 2.11
import "qmls" as QMLS
import cplusplus 1.0

Rectangle
{
    id: base
    width:640
    height:480

    ColumnLayout
    {
        anchors.fill:parent
        anchors.margins: 6
        spacing: 4

        Rectangle
        {
            id:image
            Layout.fillWidth: true
            Layout.fillHeight: true
            color:"#cdcdc0"

            TextEdit
            {
                id:text
                anchors.centerIn: parent
                width:parent.width
                text:"請點擊下方按鍵"
                verticalAlignment: Text.AlignVCenter
                horizontalAlignment: Text.AlignHCenter
                wrapMode: Text.WordWrap
                font.pointSize: 12
            }
        }

        RowLayout
        {
            Rectangle
            {
                Layout.fillWidth: true
            }

            Button
            {
                id:button
                property int index: 0
                property string buttonText:"Click"
                text:buttonText
                objectName: "button"
                onClicked:
                {
                    text.text = cplusplusObject.getString()
                }
            }

        }
    }
}
posted @ 2019-08-15 09:40 ccsdu2009 閱讀(121) | 評論 (0)編輯 收藏
 
import QtQuick 2.11
import QtQuick.Controls 2.1
import QtQuick.Controls.Styles 1.4
import QtQuick.Layouts 1.3
import QtQuick.Window 2.11
import cplusplus 1.0

Rectangle
{
    id: base
    width:640
    height:480

    ColumnLayout
    {
        anchors.fill:parent
        anchors.margins: 6
        spacing: 4

        Rectangle
        {
            id:image
            Layout.fillWidth: true
            Layout.fillHeight: true
            color:"#cdcdc0"

            TextEdit
            {
                id:text
                anchors.centerIn: parent
                width:parent.width
                text:"請點擊下方按鍵"
                verticalAlignment: Text.AlignVCenter
                horizontalAlignment: Text.AlignHCenter
                wrapMode: Text.WordWrap
                font.pointSize: 12
            }
        }

        RowLayout
        {
            Rectangle
            {
                Layout.fillWidth: true
            }

            Button
            {
                property int index: 0
                text:"點擊"

                onClicked:
                {
                    text.text = cplusplusObject.getString()
                }
            }

        }
    }
}

posted @ 2019-08-14 17:46 ccsdu2009 閱讀(745) | 評論 (0)編輯 收藏
 
ListView
        {
            id: view
            orientation: Qt.Horizontal
            Layout.fillWidth: true
            height:64
            //model: 180
            spacing: -24
            clip: true

            delegate: Rectangle
            {
                width: 50
                height: parent.height

                Image
                {
                    id:imageItem
                    width:64
                    height:64
                    anchors.centerIn: parent
                    source:getFileName(index*Math.floor(2560/180))
                    property int current: 0

                    onSourceChanged:
                    {
                        current = index;
                    }

                    MouseArea
                    {
                        id: mouseArea
                        anchors.fill: parent
                        onClicked:
                        {
                            var filename = getFileName(Math.floor(2560/180)*imageItem.current)
                            image.source = filename
                        }
                    }
                }

                function getFileName(index)
                {
                    return "images/"+index+".png"
                }
            }
        }
posted @ 2019-08-14 16:02 ccsdu2009 閱讀(1411) | 評論 (0)編輯 收藏
 
import QtQuick 2.11
import QtQuick.Controls 2.1
import QtQuick.Layouts 1.3

Rectangle
{
    id
: base
    width:640
    height:480

    property int current: 0

    ColumnLayout
    {
        anchors.fill:parent
        anchors.margins: 6
        spacing: 4

        Image
        {
            id:image
            Layout.fillWidth: true
            Layout.fillHeight: true
            source:"2436.png"
        
}

        ProgressBar
        
{
            id
:progresBar
            visible: false
            Layout.fillWidth: true
            value:0.0
        
}

        Slider
        
{
            id
:slider1
            Layout.fillWidth: true
            orientation: Qt.Horizontal
            onValueChanged:
            {
                base.current = Math.floor(2560*value)
                var filename = "images/"+base.current+".png"
;
                image.source = filename
            
}
        }

        Timer
        
{
            interval
: 40
            running: true
            triggeredOnStart: true
;
            repeat
: true

            onTriggered:
            {
                base.current = base.current + 1
                if(base.current > 2560)
                    base.current = 0
;

                image.source = "images/" + base.current + ".png";
            
}
        }

        RowLayout
        
{
            Rectangle
            {
                Layout.fillWidth
: true
            
}

            Button
            
{
                text
:"預覽"

                onClicked:
                {
                    if(progresBar.visible)
                    {
                        progresBar.visible = false
;
                    
}
                    else
                    
{
                        progresBar.visible = true;
                    
}
                }
            }

            Button
            
{
                text
:"剪切"

                onClicked:
                {
                    if(progresBar.visible)
                    {
                        progresBar.visible = false
;
                    
}
                    else
                    
{
                        progresBar.visible = true;
                    
}
                }
            }
        }
    }
}
posted @ 2019-08-14 14:34 ccsdu2009 閱讀(330) | 評論 (0)編輯 收藏
 
#ifndef KEYWORD_HIGHLIGHTER_H
#define KEYWORD_HIGHLIGHTER_H
#include 
<QSyntaxHighlighter>
#include 
<QTextCharFormat>
#include 
<QRegularExpression>
#include 
<QTextDocument>

class KeyWordHighlighter final : public QSyntaxHighlighter
{
    Q_OBJECT
public:
    KeyWordHighlighter(QTextDocument
* parent = nullptr);
    
void setKeyWords(const QStringList& keywords);
protected:
    
void highlightBlock(const QString& text)override;
private:
    
struct HighlightingRule
    {
        QRegularExpression pattern;
        QTextCharFormat format;
    };

    QVector
<HighlightingRule> highlightingRules;
    QTextCharFormat keywordFormat;
};

#include "KeyWordHighLighter.h"

KeyWordHighlighter::KeyWordHighlighter(QTextDocument* parent):
QSyntaxHighlighter(parent)
{
}

void KeyWordHighlighter::setKeyWords(const QStringList& words)
{
    HighlightingRule rule;

    keywordFormat.setForeground(Qt::black);
    keywordFormat.setFontWeight(QFont::Bold);

    foreach(auto word,words)
    {
        rule.pattern = QRegularExpression(word);
        rule.format = keywordFormat;
        highlightingRules.append(rule);
    }
}

void KeyWordHighlighter::highlightBlock(const QString& text)
{
    foreach(auto rule,highlightingRules)
    {
        QRegularExpressionMatchIterator matchIterator = rule.pattern.globalMatch(text);
        while(matchIterator.hasNext())
        {
            QRegularExpressionMatch match = matchIterator.next();
            setFormat(match.capturedStart(),match.capturedLength(),rule.format);
        }
    }
}
posted @ 2019-08-13 18:35 ccsdu2009 閱讀(527) | 評論 (0)編輯 收藏
 
#include <QStringList>
#include 
<QJsonArray>
#include 
<QJSonDocument>
#include 
<QJsonObject>
#include 
<QJsonValue>
#include 
<QFile>
#include 
<QDebug>
#include 
"test.h"

#define STR(o) #o
#define INSERT_ITEM(object,o) object.insert(STR(o),o);
#define INSERT_LIST(object,o)\
    {\
        auto array 
= QJsonArray::fromStringList(o);\
        
object.insert(STR(o),array);\
    }

struct Unit
{
    QString result;
    QString author;
    QString description;
    QString notes;

    QStringList key;
    
int minValue;
    QStringList items;
    QStringList attachment;

    QString toString()
    {
        QJsonObject 
object;
        INSERT_ITEM(
object,result)
        INSERT_ITEM(
object,author)
        INSERT_ITEM(
object,description)
        INSERT_ITEM(
object,notes)
        INSERT_LIST(
object,key)
        INSERT_ITEM(
object,minValue)
        INSERT_LIST(
object,items)
        INSERT_LIST(
object,attachment)

        QJsonDocument doc;
        doc.setObject(
object);
        
return doc.toJson(QJsonDocument::JsonFormat::Compact);
    }

    
bool loadFromFile(const QString& filename)
    {
        QFile file(filename);
        
if(!file.open(QIODevice::ReadOnly))
            
return false;

        QByteArray buffer 
= file.readAll();
        file.close();

        QJsonParseError error;
        QJsonDocument doc(QJsonDocument::fromJson(buffer,
&error));

        
if(error.error != QJsonParseError::NoError)
        {
            qDebug() 
<< "parse json file:"<<filename<< " failed!";
            
return false;
        }

        auto 
object = doc.object();
        
if(!object.contains("result"|| !object.contains("key"))
        {
            qDebug() 
<< "invalid json file:" << filename << " structure!";
            
return false;
        }

        result 
= object[STR(result)].toString();
        author 
= object[STR(author)].toString();
        description 
= object[STR(description)].toString();
        notes 
= object[STR(notes)].toString();

        minValue 
= object[STR(minValue)].toInt();

        auto fn 
= [](const QJsonArray& array)->QStringList
        {
            QStringList items;
            
foreach(auto item,array)
                items 
+= item.toString();
            
return items;
        };

        key 
= fn(object[STR(key)].toArray());
        items 
= fn(object[STR(items)].toArray());
        attachment 
= fn(object[STR(attachment)].toArray());
        
return true;
    }
};
 
void test()
{
    Unit unit;
    unit.attachment.append(
"acchemtn1");
    unit.attachment.append(
"acchemtn2");

    unit.key.append(
"key1");
    unit.author 
= "author";
    unit.description 
= "this is a remark";
    unit.items.append(
"item1");
    unit.items.append(
"item2");
    unit.items.append(
"item3");
    unit.minValue 
= 1;
    unit.notes 
= "notes";

    QFile file(
"file.json");
    file.open(QIODevice::WriteOnly);

    file.write(unit.toString().toLocal8Bit().data());

    file.close();

    qDebug() 
<< unit.toString();
}
posted @ 2019-08-13 14:43 ccsdu2009 閱讀(902) | 評論 (0)編輯 收藏
 
class VideoRenderer : public QObject, public QQuickFramebufferObject::Renderer, public QOpenGLFunctions
{
    Q_OBJECT
public:
    
explicit VideoRenderer(QQuickFramebufferObject* object);
    
~VideoRenderer();

    QOpenGLFramebufferObject
* createFramebufferObject(const QSize& size);
    
void render();
public slots:
    
void updateVideoFrame(AVFrame* frame);
    
void paint();
private:
    std::mutex mux;
    QGLShaderProgram program;
    GLuint yuv[
3= { 0 };
    GLuint textures[
3= { 0 };
    unsigned 
char* datas[3= { 0 };
    QSize videoSize;
    QQuickFramebufferObject
* fbo;
};

VideoRenderer::VideoRenderer(QQuickFramebufferObject
* object):
QObject(
object)
{
    fbo 
= object;
    initializeOpenGLFunctions();

    qDebug() 
<< program.addShaderFromSourceCode(QGLShader::Fragment, tString);
    qDebug() 
<< program.addShaderFromSourceCode(QGLShader::Vertex, vString);

    program.bindAttributeLocation(
"vertexIn", A_VER);
    program.bindAttributeLocation(
"textureIn", T_VER);
    
    qDebug() 
<< "program.link() = " << program.link();
    qDebug() 
<< "program.bind() = " << program.bind();

    
static const GLfloat ver[] = {
        
-1.0f,-1.0f,
        
1.0f,-1.0f,
        
-1.0f1.0f,
        
1.0f,1.0f
    };

    
static const GLfloat tex[] = {
        
0.0f1.0f,
        
1.0f1.0f,
        
0.0f0.0f,
        
1.0f0.0f
    };

    glVertexAttribPointer(A_VER, 
2, GL_FLOAT, 00, ver);
    glEnableVertexAttribArray(A_VER);

    glVertexAttribPointer(T_VER, 
2, GL_FLOAT, 00, tex);
    glEnableVertexAttribArray(T_VER);

    yuv[
0= program.uniformLocation("tex_y");
    yuv[
1= program.uniformLocation("tex_u");
    yuv[
2= program.uniformLocation("tex_v");

    mux.unlock();

    glGenTextures(
3, textures);
}

VideoRenderer::
~VideoRenderer()
{
    
if(datas[0])
    {
        
for(int i = 0; i < 3; i++)
            delete datas[i];
    }
}

void SaveAvFrame(const QString& file,AVFrame* avFrame)
{
    FILE 
*fDump = fopen(file.toLocal8Bit().data(), "ab");

    uint32_t pitchY 
= avFrame->linesize[0];
    uint32_t pitchU 
= avFrame->linesize[1];
    uint32_t pitchV 
= avFrame->linesize[2];

    uint8_t 
*avY = avFrame->data[0];
    uint8_t 
*avU = avFrame->data[1];
    uint8_t 
*avV = avFrame->data[2];

    
for (uint32_t i = 0; i < avFrame->height; i++) {
        fwrite(avY, avFrame
->width, 1, fDump);
        avY 
+= pitchY;
    }

    
for (uint32_t i = 0; i < avFrame->height / 2; i++) {
        fwrite(avU, avFrame
->width / 21, fDump);
        avU 
+= pitchU;
    }

    
for (uint32_t i = 0; i < avFrame->height / 2; i++) {
        fwrite(avV, avFrame
->width / 21, fDump);
        avV 
+= pitchV;
    }

    fclose(fDump);
}

void VideoRenderer::updateVideoFrame(AVFrame* frame)
{
    
if(!frame)
        
return;

    mux.
lock();

    
if (frame->width != videoSize.width() || frame->height != videoSize.height())
    {
        videoSize.setWidth(frame
->width);
        videoSize.setHeight(frame
->height);
        
if (datas[0])
        {
            
for (int i = 0; i < 3; i++)
            {
                delete datas[i];
                datas[i] 
= 0;
            }
        }

        datas[
0= new unsigned char[frame->width*frame->height];        //Y
        datas[1= new unsigned char[frame->width*frame->height / 4];    //U
        datas[2= new unsigned char[frame->width*frame->height / 4];    //V
    }

    
if (!datas[0])
    {
        datas[
0= new unsigned char[frame->width*frame->height];        //Y
        datas[1= new unsigned char[frame->width*frame->height / 4];    //U
        datas[2= new unsigned char[frame->width*frame->height / 4];    //V
    }

    
if (videoSize.width() == frame->linesize[0])
    {
        memcpy(datas[
0], frame->data[0], videoSize.width()*videoSize.height());
        memcpy(datas[
1], frame->data[1], videoSize.width()*videoSize.height() / 4);
        memcpy(datas[
2], frame->data[2], videoSize.width()*videoSize.height() / 4);
    }
    
else
    {
        
for (int i = 0; i < videoSize.height(); i++//
            memcpy(datas[0+ videoSize.width()*i, frame->data[0+ frame->linesize[0* i, videoSize.width());
        
for (int i = 0; i < videoSize.height() / 2; i++//U
            memcpy(datas[1+ videoSize.width() / 2 * i, frame->data[1+ frame->linesize[1* i, videoSize.width());
        
for (int i = 0; i < videoSize.height() / 2; i++//V
            memcpy(datas[2+ videoSize.width() / 2 * i, frame->data[2+ frame->linesize[2* i, videoSize.width());
    }


    mux.unlock();
    av_frame_free(
&frame);

    update();
}

void VideoRenderer::render()
{
    paint();
}

void VideoRenderer::paint()
{
    
if (videoSize.isEmpty())
        
return;

    mux.
lock();

    
//Y
    glBindTexture(GL_TEXTURE_2D, textures[0]);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexImage2D(GL_TEXTURE_2D, 
0, GL_RED, videoSize.width(), videoSize.height(), 0, GL_RED, GL_UNSIGNED_BYTE, 0);

    
//U
    glBindTexture(GL_TEXTURE_2D, textures[1]);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexImage2D(GL_TEXTURE_2D, 
0, GL_RED, videoSize.width() / 2, videoSize.height() / 20, GL_RED, GL_UNSIGNED_BYTE, 0);

    
//V
    glBindTexture(GL_TEXTURE_2D, textures[2]);

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

    glTexImage2D(GL_TEXTURE_2D, 
0, GL_RED, videoSize.width() / 2, videoSize.height() / 20, GL_RED, GL_UNSIGNED_BYTE, 0);
 

    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D, textures[
0]); // to y

    glTexSubImage2D(GL_TEXTURE_2D, 
000, videoSize.width(), videoSize.height(), GL_RED, GL_UNSIGNED_BYTE, datas[0]);
    glUniform1i(yuv[
0], 0);

    glActiveTexture(GL_TEXTURE0 
+ 1);
    glBindTexture(GL_TEXTURE_2D, textures[
1]); // 1 to u
    glTexSubImage2D(GL_TEXTURE_2D, 000, videoSize.width() / 2, videoSize.height() / 2, GL_RED, GL_UNSIGNED_BYTE, datas[1]);
    glUniform1i(yuv[
1], 1);


    glActiveTexture(GL_TEXTURE0 
+ 2);
    glBindTexture(GL_TEXTURE_2D, textures[
2]); // 2 to v
    glTexSubImage2D(GL_TEXTURE_2D, 000, videoSize.width() / 2, videoSize.height() / 2, GL_RED, GL_UNSIGNED_BYTE, datas[2]);

    glUniform1i(yuv[
2], 2);

    glDrawArrays(GL_TRIANGLE_STRIP, 
04);
    mux.unlock();

}
 
QOpenGLFramebufferObject
* VideoRenderer::createFramebufferObject(const QSize &size)
{
    QOpenGLFramebufferObjectFormat format;   
//當大小發生變化時,會調用此函數生成對應大小的FBO
    format.setAttachment(QOpenGLFramebufferObject::CombinedDepthStencil);
    format.setSamples(
4);
    
return new QOpenGLFramebufferObject(size,format);
}
posted @ 2019-08-12 09:25 ccsdu2009 閱讀(479) | 評論 (0)編輯 收藏
 
#ifndef APPLICATION_H
#define APPLICATION_H
#include 
<QApplication>
#include 
<QSharedMemory>

class Application : public QApplication
{
    Q_OBJECT 
public:
    Application(
int argc,char** argv,const QString& app);
    
~Application();
public:
    
bool isRunning();
private:
    QSharedMemory sharedMemory;
};

#endif

#include "Application.h"

Application::Application(int argc,char** argv,const QString& app):
QApplication(argc,argv),
sharedMemory(app)
{
    if(!sharedMemory.isAttached())
        sharedMemory.create(app.size()+1);
}

Application::~Application()
{
}

bool Application::isRunning()
{
    return sharedMemory.attach();
}
posted @ 2019-08-09 14:36 ccsdu2009 閱讀(411) | 評論 (0)編輯 收藏
 
QML
import QtQuick 2.2
import QtQuick.Layouts 1.1
import QtQuick.Controls 1.2

Column 
{
    width
:640
    height:400
    
    Image 
    { 
        id:image
        width:640
        cache: false
        source: "image://colors/red" 
    
}
    
    Connections
    
{
        target
: imagecontext
        onCallQmlRefeshImg:
        {
            image.source = ""
            image.source = "image://imageprovider"
            console.log("refresh.")
;
        
}
    }    
}
ImageProvider
class ColorImageProvider : public QQuickImageProvider
{
public:
    ColorImageProvider()
        : QQuickImageProvider(QQuickImageProvider::Pixmap)
    {
    }

    QPixmap requestPixmap(
const QString &id, QSize *size, const QSize &requestedSize) override
    {
        
int width = 100;
        
int height = 50;

        
if (size)
            
*size = QSize(width, height);
        QPixmap pixmap(requestedSize.width() 
> 0 ? requestedSize.width() : width,
            requestedSize.height() 
> 0 ? requestedSize.height() : height);
        pixmap.fill(QColor(id).rgba());
        
return pixmap;
    }
};

class ImageProvider : public QQuickImageProvider
{
public:
    ImageProvider::ImageProvider(ImageType type, Flags flags 
= Flags()) :
        QQuickImageProvider(type, flags)
    {
    }
    
    
~ImageProvider(){}

    QImage ImageProvider::requestImage(
const QString &id, QSize *size, const QSize &requestedSize)
    {
        
return image;
    }

    QImage image;
};

ImageContext
class ImageContext : public QObject
{
    Q_OBJECT
public:
    ImageContext(QObject
* parent = 0);
    ImageProvider
* m_imageProvider = nullptr;
public slots:
    
void setImage(const QImage& image);
signals:
    
void callQmlRefeshImg();
};
ImageContext::ImageContext(QObject* parent):
QObject(parent)
{
    m_imageProvider 
= new ImageProvider(QQuickImageProvider::Image);
}

void ImageContext::setImage(const QImage& image)
{
    m_imageProvider
->image = image;
    emit callQmlRefeshImg();
}

注冊和相應
    qml->engine()->addImageProvider(QLatin1String("colors"),new ColorImageProvider);
    ImageContext
* context = new ImageContext(this);
    qml
->engine()->rootContext()->setContextProperty("imagecontext",context);
    qml
->engine()->addImageProvider(QLatin1String("imageprovider"),context->m_imageProvider);

    qml
->setSource(QUrl("image.qml"));

    QDir dir(
"E:/MyVideoPlayer/Win32/Release/capture");

    QStringList files 
= dir.entryList(QDir::Files,QDir::SortFlag::Time | QDir::SortFlag::Reversed);
    qDebug() 
<< "files:" << files.size();
    
    connect(button, 
&QPushButton::clicked,[=]()
       {
           
static int current = 0;
           auto list 
= qml->rootObject()->childItems();
           
if(current == files.size())
               current 
= 0;

           QImage image;
           QString file 
= QString("E:/MyVideoPlayer/Win32/Release/capture/"+ files.at(current);
           qDebug() 
<< "loaded:" << image.load(file) << "," << file<<","<<current;
           context
->setImage(image);

           current
++;
       }
    );

posted @ 2019-08-05 11:37 ccsdu2009 閱讀(970) | 評論 (0)編輯 收藏
僅列出標題
共38頁: 1 2 3 4 5 6 7 8 9 Last 
 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品婷婷| 久久成人免费日本黄色| 91久久精品一区二区别| 亚洲天堂成人在线观看| 欧美国产精品劲爆| 亚洲国产另类久久精品| 蜜臀av一级做a爰片久久| 午夜一区二区三区在线观看| 国产精品国产三级国产aⅴ浪潮 | 欧美在线视频免费播放| 国产精品女主播在线观看| 亚洲午夜激情网页| 亚洲精品一二| 欧美涩涩视频| 性亚洲最疯狂xxxx高清| 亚洲已满18点击进入久久| 国产精品久久久久久久久搜平片 | 亚洲午夜久久久久久久久电影院 | 亚洲一区二区黄色| 国产精品一区二区三区久久| 香蕉成人伊视频在线观看 | 国产精品久在线观看| 亚洲少妇诱惑| 亚洲在线观看视频| 国产一区二区日韩精品欧美精品| 欧美在线免费播放| 欧美中文日韩| 亚洲精品国产精品国自产在线| 91久久综合| 欧美日韩综合| 欧美一级电影久久| 久久婷婷av| 亚洲免费激情| 亚洲级视频在线观看免费1级| 国产一区二区精品| 美女91精品| 久久偷看各类wc女厕嘘嘘偷窃| 在线日韩成人| 999亚洲国产精| 国产日韩在线播放| 欧美激情亚洲国产| 国产精品久久久久久久9999| 久久久精品动漫| 欧美电影免费观看| 午夜视频精品| 欧美va亚洲va日韩∨a综合色| 亚洲一区二区三区高清不卡| 欧美在线免费观看亚洲| 99精品国产一区二区青青牛奶| 亚洲在线观看视频| 日韩视频精品在线| 久久狠狠一本精品综合网| 日韩午夜在线播放| 久久久天天操| 欧美一级久久| 欧美成人午夜影院| 久久久久国产精品一区二区| 欧美女主播在线| 久久这里有精品视频| 国产精品swag| 亚洲国产毛片完整版| 国产亚洲欧美中文| 亚洲五月婷婷| 一区二区三区免费看| 久久在线精品| 久久男人av资源网站| 国产精品高潮呻吟久久| 欧美激情免费观看| 激情综合亚洲| 午夜视黄欧洲亚洲| 午夜在线观看欧美| 欧美色欧美亚洲高清在线视频| 欧美风情在线| 伊人久久大香线蕉av超碰演员| 一区二区三区四区五区视频| 亚洲激情小视频| 久久先锋影音av| 久久久人成影片一区二区三区| 国产精品婷婷| 亚洲图片欧美一区| 亚洲一区二区三区免费观看| 欧美日本国产视频| 亚洲毛片播放| 亚洲视频一区在线| 欧美日韩综合不卡| 在线亚洲免费视频| 午夜精品区一区二区三| 国产精品手机视频| 午夜国产精品视频| 久久久久国产精品人| 好男人免费精品视频| 久久成人一区| 欧美va天堂| 亚洲精品视频免费| 欧美日韩国产成人在线免费 | 亚洲午夜精品久久| 亚洲制服少妇| 国内精品一区二区三区| 亚洲精品一区二区三| 亚洲视频免费在线观看| 亚洲区第一页| 91久久香蕉国产日韩欧美9色| 久久国产精品网站| 欧美一区中文字幕| 国产日韩欧美三级| 亚洲欧美制服另类日韩| 欧美一级视频免费在线观看| 国产麻豆精品视频| 久久精品视频免费| 欧美国产亚洲精品久久久8v| 亚洲精品国精品久久99热一| 欧美激情在线播放| 亚洲深夜福利| 久久久久网站| 亚洲激情在线视频| 欧美日韩性生活视频| 亚洲欧美韩国| 免费毛片一区二区三区久久久| 亚洲大片在线观看| 欧美日韩亚洲一区二区三区在线观看 | 久久久青草青青国产亚洲免观| 欧美成人精品1314www| 亚洲美女免费精品视频在线观看| 欧美日韩www| 亚洲茄子视频| 在线观看国产成人av片| 欧美激情影院| 亚洲女性裸体视频| 在线观看的日韩av| 欧美日韩一区二区精品| 午夜一级在线看亚洲| 欧美激情一区二区三区在线视频观看 | 欧美精品国产一区| 亚洲在线播放| 欧美激情在线观看| 午夜精品久久久久| 亚洲精品国产系列| 国产欧美综合在线| 欧美精品一卡| 久久久7777| 亚洲天堂久久| 亚洲欧洲一区二区三区| 久久精品99国产精品酒店日本| 亚洲日本va午夜在线影院| 国产欧美一区二区三区国产幕精品 | 欧美大片在线看| 欧美一区午夜精品| 亚洲一级二级在线| 亚洲精品乱码视频| 欧美a级在线| 久久深夜福利| 亚洲欧美日韩精品综合在线观看| 亚洲欧美国产制服动漫| 亚洲风情亚aⅴ在线发布| 欧美一区二区高清在线观看| 亚洲精品乱码久久久久久按摩观 | 国产日韩欧美电影在线观看| 欧美国产日产韩国视频| 欧美一级播放| 亚洲午夜三级在线| 日韩一级片网址| 亚洲第一黄网| 久久精品夜色噜噜亚洲a∨ | 欧美国产日韩一区| 久久天天躁狠狠躁夜夜av| 亚洲男女自偷自拍| 日韩一区二区电影网| 亚洲高清毛片| 精品69视频一区二区三区| 国产偷久久久精品专区| 国产精品萝li| 欧美视频一区二区三区四区| 欧美成人免费va影院高清| 久久精品欧美| 欧美电影免费观看网站| 美女精品在线观看| 老司机67194精品线观看| 久久国产精彩视频| 久久国产免费看| 精品91在线| 尤物在线观看一区| 伊人成年综合电影网| 国语自产精品视频在线看8查询8| 国产欧美一区二区色老头 | 欧美日韩视频专区在线播放 | 国产伦精品免费视频| 欧美性猛交一区二区三区精品| 欧美日韩亚洲一区二区| 欧美午夜视频在线| 国产精品一级久久久| 国产精品美女主播| 国产日韩欧美一二三区| 国产亚洲欧美另类一区二区三区| 国产日韩一区| 伊人久久大香线| 亚洲高清中文字幕| 亚洲麻豆视频| 小黄鸭视频精品导航| 亚洲一线二线三线久久久| 9久草视频在线视频精品|