• <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>

            zhonghua

            C++博客 首頁 新隨筆 聯系 聚合 管理
              72 Posts :: 1 Stories :: 4 Comments :: 0 Trackbacks

            #

            其實很簡單,代碼如下:

                        QComboBox *combobox = new QComboBox(this);
                        QStringList strings;
                        strings << tr("自由") << tr("典型") << tr("默認") ;
                        combobox->addItems(strings);

            posted @ 2012-03-29 15:49 米米 閱讀(2798) | 評論 (0)編輯 收藏

            在實現了newform的2個頁面的功能以后,為了完善產品的人性化,我在第2個頁面上增加了一個顯示前面已經選擇的路徑和模板名稱的功能。但是這里就遇到了一個問題,如果萬一用戶選擇的路徑和名稱都太長了,那么下面在顯示的時候就會截斷,這就很不爽了。

                  別看這個小問題,這就涉及了2個技巧。

            1. 讓QLabel自適應text的大小,直接用下面的代碼:

            LabelName->adjustSize();

            2. 讓QLabel能夠自動判斷并換行顯示:

            LabelName->setGeometry(QRect(328, 240, 329, 27*4));  //四倍行距

            LabelName->setWordWrap(true);
            LabelName->setAlignment(Qt::AlignTop);

                   還是那句話,別看就實現了這么一個小功能,前期的摸索可真是痛苦。。新手傷不起啊。。

            posted @ 2012-03-29 15:48 米米 閱讀(3930) | 評論 (3)編輯 收藏

            Qt中使用圖片資源的方法有很多種,以前我一直分不清各種之間的區別和Qt相應的處理機制,后來遇到一些實際的問題,然后再加上查閱源碼和資料,總算弄明白一些事情,但是本文僅僅是個人理解,如有錯誤之處請告訴我,大家一起進步。

             

                 圖片是一種資源,而在Qt中,對于資源的使用是有其獨特的方式的!

                 ①:一般來說:資源在內存中是用資源對象樹來表示的,該樹在程序啟動時創建。

                 ②:而對于資源而言:我們都是需要先將其加入到這棵樹中才能加載到內存中并被程序使用!!

                 ③:而將一個圖片資源放到程序的資源對象樹中是用函數QResource::registerResource()來實現的。亦即:要將資源向這顆資源對象樹進行注冊,這樣才對在系統中new創建這個資“葉子”。

                    對于這一點我們可以直接查看該函數的源碼:

             

                    bool
                   QResource::registerResource(const QString &rccFilename, const QString &resourceRoot)
                   {
                        QString r = qt_resource_fixResourceRoot(resourceRoot);
                        if(!r.isEmpty() && r[0] != QLatin1Char('/'))

                        {
                             qWarning("QDir::registerResource: Registering a resource [%s] must be rooted in an absolute path (start  with /) [%s]",
                             rccFilename.toLocal8Bit().data(), resourceRoot.toLocal8Bit().data());
                             return false;
                        }

                        QDynamicFileResourceRoot *root = new QDynamicFileResourceRoot(r);
                        if(root->registerSelf(rccFilename))

                        {
                             root->ref.ref();
                             QMutexLocker lock(resourceMutex());
                             resourceList()->append(root);
                             return true;
                        }
                       delete root;
                       return false;
                }

               

                   由上可見:主要就是先創建了一個資源內存對象,而后將其append到資源對象樹上。

             

               ④:當我們不再使用某個圖片資源時:當然希望其不再占用內存,此時需要釋放delete它。這時要用QResource::unregisterResource()函數來進行反注冊。此函數的作用就是在資源對象樹中遍歷找到代表該資源的節點,而后delete釋放它。源碼為:

             

                bool
                QResource::unregisterResource(const QString &rccFilename, const QString &resourceRoot)
                {
                      QString r = qt_resource_fixResourceRoot(resourceRoot);

                      QMutexLocker lock(resourceMutex());
                      ResourceList *list = resourceList();
                      for(int i = 0; i < list->size(); ++i)

                      {
                           QResourceRoot *res = list->at(i);
                           if(res->type() == QResourceRoot::Resource_File)

                           {
                                QDynamicFileResourceRoot *root = reinterpret_cast<QDynamicFileResourceRoot*>(res);
                                 if(root->mappingFile() == rccFilename && root->mappingRoot() == r)

                                 {
                                     resourceList()->removeAt(i);
                                      if(!root->ref.deref())

                                      {
                                          delete root;
                                          return true;
                                      }
                                      return false;
                                }
                           }
                       }
                       return false;
               }

             

             

                總起來說就是:一個程序所用的所有資源都是放到一顆資源對象樹中的,當程序啟動時該樹便會自動創建,而當我們使用某個資源時:都需要實現將其向該樹進行注冊,當不需要時則需要進行反注冊。

             

             

                ========================================================================

             

                 下邊說一下我常用的使用圖片資源的方式,主要有三種:

             

                  1:使用qrc資源文件來加載。

                  對于這種方式:其是將所有的圖片資源都轉化成二進制數據,存放在一個靜態數組中,而后放到應用程序中。所以:當程序執行時:所有圖片都會一直在內存中,這楊雖然讀取速度很快,但是很占用內存空間,對于一些內存有限的設備不是很適合。

             

                  系統轉換的主要步驟為:

                  ①:當編譯時,其會將我們寫的 name.qrc文件轉換生成一個qrc_name.cpp的資源文件,我們可以自己看下這個生成的cpp文件,發現其中就是主要有三個static const數組。

                          qt_resource_data[]

                          qt_resource_name[]

                          qt_resource_struct[]

             

                 這其中qt_resource_data[]中存放的就是圖片的二進制數據。而后邊的兩個數組我們猜測是做了一個圖片名字到上邊數據的映射,方便系統找到data中的二進制數據。

             

                   至于內部作用機制,有的資料上說是:當使用qrc資源文件時:系統會自動將所有的圖片資源都向程序的資源對象樹進行注冊,并且當程序結束運行時再進行反注冊。這也正好解釋了為什么此種方法下圖片資源會一直占用內存的原因。

             

                   使用這種方法時:由于圖片資源一直在內存中,避免了I/O操作,從而加快了讀取速度。但是卻是以消耗內存為代價的。我做過一個project,因為其中用了大量的圖片,結果導致內存使用量超乎想象的大,后來就進行了優化,也就是用了下邊提到的第二種方法。

             

             

                 2:手動進行注冊。

                   第一種方法相當于靜態加載,但很多情況下我們更希望是動態加載,亦即:用到哪個資源才將該資源加載進來,而不用的則不加載。

             上邊第一種方法之 所以顯示出靜態加載的特性,這是由于系統一次性自動把所有圖片資源都進行了注冊,并且在程序運行過程中一直沒有進行反注冊才導致的。  如果我們可以自行決定:什么時候對那一部分圖片資源進行注冊?什么時候對哪一部分圖片資源進行反注冊。則顯然我們可以手動控制整個資源在內存中的生存周 期!!

                

                   這種方法的主要步驟為:

                   ①:生成外部二進制資源文件。

                   ②:在需要時將該資源向程序的資源對象樹進行注冊并使用。

                   ③:在不需要時進行反注冊。

                  步驟①主要是用了Qt自帶的一個工具:rcc.exe  (處于bin文件夾中)。這是Qt的一個資源編譯器,其編譯對象是qrc文件,而生成rcc二進制資源文件。

                  那我們可以用它來執行命令 rcc -binary name.qrc -o name.rcc  來把qrc資源文件轉成rcc二進制資源文件。

                  而后在程序內部:當需要使用某一圖片資源時:則直接調用

                 QResource::registerResource(“name.rcc”)進行注冊創建分配內存即可!  而不使用時候則調用反注冊函數!!

             

                 --》為了進行驗證,我曾經測試了一個例子,主要思路就是:在一個工程中寫了一個包含若干幅圖片的qrc資源文件,將其轉化成rcc二進制資源文件。   我在程序界面上擺放兩個按鈕button,  其中一個button的click事件響應槽負責調用QResource::registerResource()將這個二進制資源文件注冊, 而另外一個button進行反注冊。  然后跑一下這個程序,查看下其所占用的內存大小:

                  

            剛啟動時:程序所占內存顯示為:8940K

               

             

             

             

              而后按下第一個button進行注冊,此時占用內存為:9276K

             

              最后點一下另外一個button,進行反注冊后,其占用內存大小為:8948K

             

                  

             

                  由上測試可見:注冊后才會讓資源占用內存!!反注冊后其會從內存中delete掉!!

             

                 所以:這種方式算是動態加載,會少占用內存。但是如果圖片過多的話,什么時候需要加載,什么時候需要去掉,這些邏輯就需要十分注意了。

             

             

                3:直接I/O讀取。

                 比如:  ptr->setStyleSheet("./bmp/name.png");

                 這種方式我不怎么用,感覺I/O操作速度慢吧,所以一直沒去深究。道理上邊都有。

            posted @ 2012-03-29 15:44 米米 閱讀(1255) | 評論 (0)編輯 收藏

            方法一:思路很好。值得學習
            前兩天有人問我關于如題所示的問題,具體就是說:現在他想做一個按鈕,當click它時:只刪除編輯框中的一個文字,而當常按press時:則連續的刪除文字,此后一旦release,則立即停止刪除問題。

                  關于如何刪除一個文字,這個很好實現,這里把重點放在:如何區分這兩種狀態上。

                  我在實現時:只用了一個定時器。總體為:當第一次press時間達到0.5s時開始連續刪除,如果按壓的時間不足0.5s即release,則只刪除一個文字;  而連續刪除文字時:是每隔0.1s刪除一個,一旦中途release了,則立即停止刪除文字。

                  代碼如下,可以直接拿來用,當然,你需要自己手動實現刪除編輯框中一個文字的函數DeleteOneCharacterInEditor()。

             

             timer1 = = new QTimer(this);

             

            QObject::connect(timer1, SIGNAL(timeout ()),

            this, SLOT(DeleteOneCharacter()));

            QObject::connect(iDeleteButton, SIGNAL(pressed()),this , SLOT(PressDelete()));

            QObject::connect(iDeleteButton, SIGNAL(released ()),this, SLOT(ReleaseDelete()));

             

             //-----------------------------------------------------------------------------------------

            void  test::PressDelete()  

            {

                  press = 1;

                  timer1->setSingleShot(

            true);

                  timer1->start(500); 

            }

             

            void 

            test::DeleteOneCharacter()

            {

                 if(mEditor)

                 {

                      DeleteOneCharacterInEditor();

                 }

                 press = 0; 

                 timer1->start(100); 

            }

             

            void   test::ReleaseDelete()

                timer1->stop(); 

                if(press == 1)

                {

                    if(mEditor)  

                    {

                        DeleteOneCharacterInEditor();

                    }

            }

            方法2:
            設置QPushButton的autoRepeat的屬性,只要設為true就可以連續刪除了,而且刪除的時間間隔也可以設定。
            posted @ 2012-03-29 15:18 米米 閱讀(1285) | 評論 (0)編輯 收藏

            在父widget上擺一個子widget后,當click子widget時:只會進入到子widget的相關事件處理函數中,比如進入到 mousePressEvent()中, 而不會進入到父widget的對應事件處理函數中。畢竟:click的是子widget,其遮擋住了父widget,從而父widget接收不到這個事 件。然而事實真的是這個樣子嗎?

                 我做了一個測試: 在一個QWidget上建了一個QLabel。而后實現父QWidget的mousePressEvent(), 然后跟一下發現:當我click這個label時:居然能進入到父QWidget的mousePressEvent()中!但是如果把子改成 QPushButton則進入不了!


                 咨詢了一下別人,得到的答案是:如果子widget沒有accept或ignore該事件,則該事件會被傳遞給其父親。


               事實也確實如此:

                ①對于QLabel: 如果不重寫mouse處理函數,也沒有設置事件過濾器等操作的話,則相當于:其對mouse這個事件一直沒有進行處理,那沒有進行處理的話,相當于上邊所說的情況,此時該事件會被傳遞給其parent。

                ②而對于QPushButton而言:當click它時:其會發射clicked()信號,其實這就相當于它對該事件的一個operator過程。所以:這里它accept該事件并進行了對應處理。從而:無法傳遞給其父窗口。



                那么:對于一個繼承而來的類,只要我們重寫實現了其各個事件處理函數,則對應的事件肯定無法傳遞給其父widget!  哪怕重寫的該事件處理函數的函數體為空!


               如果是標準的控件對象,則其肯定沒重寫各個事件處理函數。那消息能不能傳遞到父widget中,則取決于中途有沒有使用事件過濾器等將該信號攔截下來了。

            posted @ 2012-03-29 15:09 米米 閱讀(614) | 評論 (0)編輯 收藏

            使用setStyleSheet來設置圖形界面的外觀:
            QT Style Sheets是一個很有利的工具,允許定制窗口的外觀,
            此外還可以用子類QStyle來完成,他的語法很大比重來源于html的CSS,但是適用于窗口

            概括:
            Style Sheets是文字性的設定,對于整個應用程序可以使用QApplication::setStyleSheet() 或者對應一個窗口可以使用QWidget::setStyleSheet(),如果好幾個樣式表在不同的層次上設定,

            QT將會集合所有的樣式表來設定外觀,這稱作級串聯
            例如:下面的樣式表指定所有的QLineEdit應該用黃色作為他們的背景顏色,所有的核對框應該用紅色作為他們的文本顏色
            QLineEdit { background: yellow }
            QCheckBox { color: red }

            對于這種定制,樣式表比palette調色板更強大,例如使用QPalette::Button role來設定一個按鈕為紅色可能引起危險

            對于單獨使用QPalette很難完成的定制,樣式表可以指定
            樣式表作用于當前窗口樣式頂部,這意味這應用程序講看起來盡可能的自然,但是任何樣式表系統參數應該考慮,不像QPalette那樣,樣式表提供檢查,如果你設定了一個按鈕的背景顏色為紅

            色,你應該確定在所有的平臺按鈕將會有一個紅色的背景,除此,Qt Designer提供樣式表集成環境,使得在不同的窗口樣式中更容易看到樣式表的效果

            此外,樣式表可以用來為你的應用程序提供一個出眾的外觀,不需要使用子類QStyle,例如,可以指定任意的圖片為單選按鈕和核對按鈕,來使它們出眾,使用這個技術,也可以獲得輔助的定

            制,這將使用幾個子類,例如指定style hint(樣式暗示),可以參看例子 Style Sheet。

            當樣式表有效時候,使用QWidget::style()可以返回QStyle,

            樣式表語法:
            樣式表語法基本和HTML CSS語法一致。
            樣式表包含了樣式規則序列,樣式規則有一個<selector>和<declaration>組成,<selector>指定哪些窗口將會被這些規則影響,<declaration>指定哪些屬性將會被設定在窗口上,例如
            QPushButton{color:red}
            在上面的,規則中,QPushButton是<selector>,{color:red}是<declaration>,這個規則指定QPushButton和他的子類將使用紅色作為前景顏色,就是字體顏色,并且對大小寫沒有分別,對于

            color,ColoR,COLOR是一樣的。
            幾個<selector>可以同時被列出,使用逗號","來分開各個<selector>,例如:
            QPushButton, QLineEdit, QComboBox { color: red }
            <declaration>部分是一對 屬性:值  對,用{}來括起來,使用分號來分開各個屬性,例如
            QPushButton { color: red; background-color: white }

            可以參看Qt Style Sheets Reference來查看部件以及樣式表的屬性列表

            關于樣式表的級聯屬性
            看下面代碼的不同
             btn1->setStyleSheet("QPushButton{color:red}"); //設定前景顏色,就是字體顏色
             btn1->setStyleSheet("QPushButton{background:yellow}"); //設定背景顏色為紅色

            btn1->setStyleSheet("QPushButton{color:red;background:yellow}");
            第一個代碼只能顯示黃色背景,第二個確實紅色字體,黃色背景,
            所以當設定一個部件時候,要在同一個>setStyleSheet()中完全寫出來。

            源代碼示例:

            Dialog::Dialog(QWidget *parent) :
                QDialog(parent),
                ui(new Ui::Dialog)
            {
                ui->setupUi(this);
                this->setWindowFlags(this->windowFlags()&Qt::WindowMaximizeButtonHint&Qt::WindowMinimizeButtonHint);//為對話框添加上最大化和最小化按鈕
            //    layout=new QBoxLayout(this);
                layout1=new QGridLayout(this);
                btn1=new QPushButton(this);
                btn1->setStyleSheet("QPushButton{color:red;background:yellow}");//設定前景顏色,就是字體顏色
            //    btn1->setStyleSheet("QPushButton{background:yellow}");
                btn1->setText("Button1");

                btn2=new QPushButton(this);
                btn2->setStyleSheet("QPushButton{color:red;background-color:#c89b64}");//使用rgb來設定背景顏色
                btn2->setText("Button2");

                 btn3=new QPushButton(this);
                 btn3->setStyleSheet("QPushButton{background-image:url(image/1.png);background-repeat: repeat-xy;background-position: center;background-attachment: fixed;background-attachment: fixed;background-attachment: fixed;;background-clip: padding}");
                 //設定按鈕的背景圖片,background-repeat可以設定背景圖片的重復規則,這里設定僅在xy方向都重復,所以圖片會被重復一次
                 //background-position用來設定圖片的位置,是左(left)還是右(right),還是在中間(center),是上(top)還是底部(bottom)
                 //background-attachment用來這定背景圖片是否卷動或者和窗口大小相匹配,默認是卷動的
                 btn3->setText("Button3");

                 btn4=new QPushButton(this);
                 btn4->setStyleSheet("QPushButton{border: 3px solid red;border-radius:8px}");//設定邊框寬度以及顏色
                 //可以使用border-top,border-right,border-bottom,border-left分別設定按鈕的上下左右邊框,
                 //同樣有border-left-color, border-left-style, border-left-width.等分別來設定他們的顏色,樣式和寬度
                 //border-image用來設定邊框的背景圖片。
                 //border-radius用來設定邊框的弧度。可以設定圓角的按鈕
                 btn4->setText("Button4");

                //字體設定
                 //font-family來設定字體所屬家族,
                 //font-size來設定字體大小
                 //font-style來設定字體樣式
                 //font-weight來設定字體深淺
                 //height用來設定其高低
                 //selection-color用來設定選中時候的顏色
                 edit1=new QLineEdit(this);
                 edit1->setStyleSheet("QLineEdit{font: bold italic large \"Times New Roman\";font-size:25px;color:#3764ff;height:50px;border:4px solid #9bc821;border-radius:15px;selection-color:pink}");

                //父窗口的設定
                 //icon-size來設定圖片大小
                 this->setWindowIcon(QIcon("image/1.png"));
                  this->setStyleSheet("QWidget{background:write url(image/2.png);icon-size:20px 5px}"); //設定整個對話框的背景顏色
            //      this->setStyleSheet("QWidget{icon-size:20px 5px}");
                layout1->addWidget(btn1,0,0);
                layout1->addWidget(btn2,0,1);
                layout1->addWidget(btn3,1,0);
                layout1->addWidget(btn4,1,1);
                 layout1->addWidget(edit1,2,0);
            }

            這里只給出來widget主窗口的cpp文件,運行得到的結果如下圖

            我們看到連粘貼 復制板都變成了使用樣式表來設定的樣式

            關于使用樣式表 setStyleSheet()) 來設定窗口樣式的時候因該注意的事項,可以參看

            http://blog.csdn.net/xie376450483/archive/2010/08/17/5818759.aspx

            posted @ 2012-03-29 14:52 米米 閱讀(972) | 評論 (0)編輯 收藏

            原本的想法是在LineEdit的textEdited()事件觸發時,如果輸入了無效的目錄名,則確認按鈕無效,同時LineEdit的字的顏色為紅色,想了老半天要如何解決這個問題,如何判斷是否非法。都想到QString和字符串匹配上面去了。

                   后來偶然搜索到一個帖子,提到了QRegExpValidator這個東西。研究了一下,利用一個正則表達式就可以很方便的限制用戶的輸入,代碼如下:

            Form的構造函數中的代碼為:

            QRegExp regExp("^[A-Za-z0-9_]+$");  //這里的意思是可以輸入包含大小寫字母,阿拉伯數字以及下劃線
            nameLineEdit->setValidator(new QRegExpValidator(regExp, this));

                   后來把表達式成這樣了:

            QRegExp regExp("\w[A-Za-z0-9\-]*");

                   這樣的話,目錄中除了第一個字符外可以包含小橫線“-”了,哦也~~
            Form類中的一個槽函數為:

            void NewForm::on_nameLineEdit_textEdited()
            {
                savePushBtn->setEnabled(nameLineEdit->hasAcceptableInput());
            }

                   發現,按鈕狀態觸發的功能完成了,而在nameLineEdit中輸入時,如果是星號啊,斜杠啊之類的直接就按了鍵也沒反應,即不會顯示到lineedit里面。這就無形之中將我那個想要把非法字符顯示為紅色的功能pass掉了,因為也沒有必要了。

                   無論如何解決了一個小問題卻學到了很多。

            1,用QRegExpValidator很有用。它將我要做的字符串匹配啊那些操作全部省略了,而對于正則表達式的學習還應該深入一下,因為我還沒完全弄明白。Qt的資料真的很少,而里面內容很多,不可能一下子從頭學,只能隧道式學習了。

            2,用on_objectName_SignalName()這個函數命名的槽函數非常方便。它相當于自動會生成這段代碼:

            connect ( objectName, SIGNAL(SignalName), this, SLOT(on_objectName_SignalName()))

            這也是以前跟黃老師一起討論時,他老說on函數on函數的,我一時沒會過意,現在我明白了。

                   下面鏈接兩個網頁,我就不貼過來了,要查的話直接進去看吧:

            QT4對話框快速設計:http://xuexg2000.blog.163.com/blog/static/139996409201032912432439/

            (在這里我學會了on函數)

            QT正則表達式:http://jesserei.blog.163.com/blog/static/121411689201011210846198/

            (在這里學會如何設置合法字符)

            posted @ 2012-03-29 14:07 米米 閱讀(820) | 評論 (0)編輯 收藏

            因為從QLineEdit中獲取的字符串為QString類型, 但是想利用系統調用新建一個目錄,然而,系統調用system(const char *)中必須為const char類型,如何把QString轉換為char呢?下面的代碼就可以實現。

            QString copycommand = ...;
            const char *c_copycommand = copycommand.toAscii().constData();

            posted @ 2012-03-29 14:03 米米 閱讀(1360) | 評論 (1)編輯 收藏

            可以使不想要的按鈕消失掉,但是frame的框框還存在。

            setWindowFlags(windowFlags() &~ Qt::WindowMinMaxButtonsHint);

            setWindowFlags(windowFlags() &~ Qt::WindowCloseButtonHint);   //Qt::WindowCloseButtonHint其實是一個值 0x00080000

                   這里的“&~”是取反以后再按位與的意思,下面的“|”是按位或的意思。

                   但是如果都不想要的時候,一起使用的時候就無效了。

            setWindowFlags(windowFlags() &~ (Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint));

                   偶然間發現了一個問題,我感覺是個bug,就是如果固定窗口的大小,哪么這個全部都屏蔽掉的方案就成功了。

            setFixedSize(679, 423);

            posted @ 2012-03-29 14:02 米米 閱讀(1697) | 評論 (0)編輯 收藏

            設置窗口居中顯示

            方法一:在窗口(QWidget類及派生類)的構造函數中添加如下代碼:

            #include <QDesktopWidget>

            //.......
            QDesktopWidget* desktop = QApplication::desktop(); // =qApp->desktop();也可以
            move((desktop->width() - this->width())/2, (desktop->height() - this->height())/2);
            //.......

            重新編譯后,該窗口啟動時在屏幕居中的位置。

            方法二:在調用show()函數后調用move()函數,j將窗口移動到屏幕中央。

            #include <QDesktopWidget>

            int main(int argc, char *argv[])
            {
                QApplication a(argc, argv);
                MainWindow w;
                w.show();
                w.move ((QApplication::desktop()->width() - w.width())/2,(QApplication::desktop()->height() - w.height())/2);
                return a.exec();
            }

            posted @ 2012-03-29 13:52 米米 閱讀(1483) | 評論 (0)編輯 收藏

            僅列出標題
            共8頁: 1 2 3 4 5 6 7 8 
            国产成人无码久久久精品一| 99久久国产宗和精品1上映| 久久99国产精品99久久| 一本大道加勒比久久综合| 久久人妻少妇嫩草AV蜜桃| 亚洲午夜久久久久久久久电影网 | 久久99热狠狠色精品一区| 久久99热这里只有精品国产| 亚洲人成无码久久电影网站| 99久久精品日本一区二区免费| 久久久国产精华液| 精品久久久久久无码中文字幕一区| 久久精品成人免费观看97| 蜜臀久久99精品久久久久久小说| 精品99久久aaa一级毛片| 亚洲va中文字幕无码久久| 久久久国产一区二区三区| 99久久精品国内| 久久综合九色综合网站| 国产精品欧美亚洲韩国日本久久| 久久久久久九九99精品| 亚洲国产香蕉人人爽成AV片久久 | 久久久中文字幕日本| 亚洲国产精品热久久| 久久婷婷五月综合97色 | 久久99国内精品自在现线| 怡红院日本一道日本久久| 久久丫精品国产亚洲av不卡| 欧美日韩精品久久免费| 亚洲国产精品狼友中文久久久| 久久av高潮av无码av喷吹| 色综合久久综精品| 久久精品国产免费一区| 久久精品国产亚洲欧美| 久久精品视频网| 精品久久久久久综合日本| 青青草原综合久久| 国产 亚洲 欧美 另类 久久| 亚洲一区中文字幕久久| 久久一区二区免费播放| 一级a性色生活片久久无|