国产精品青草久-国产精品情侣愉拍-国产精品区网红主-国产精品区一区二-国产精品热久久-国产精品热热热-国产精品人aⅴ-国产精品人成在线-国产精品人妻人伦-国产精品人人

金喜正规买球

Qt網格組件DataGrid:如何在網格中輸入新行

翻譯|使用教程|編輯:鮑佳佳|2020-11-16 11:32:29.477|閱讀 187 次

概述:QtitanDataGrid是一款適用于Qt的商業化DataGrid 組件,它使得表格數據可以直接面向終端用戶。本文演示了用戶如何在網格中輸入新行。新行可以位于視圖的頂部或底部。

# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>

QtitanDataGrid是一款適用于Qt的商業化DataGrid 組件,它使得表格數據可以直接面向終端用戶。這個組件吸收了用戶界面結構顯示表格方面所有的現代化技術的精華,是目前Qt市場上唯一一款擁有如此高級功能和出色性能的網格組件。這個Qt數據網格組件使用純C++創建,運行速度極快,處理大數據和超大數據集的效果突出。QtitanDataGrid完全集成了QtDesigner,因而極易適應其他相似的開發環境,保證100%兼容Qt GUI。

點擊下載QtitanDataGrid最新試用版

該示例顯示了如何使用添加新行功能。

該示例演示了用戶如何在網格中輸入新行。新行可以位于視圖的頂部或底部。


代碼如下:

.pro文件:

TEMPLATE = app

TARGET = "Grid_"$$member(TARGET, 0)

QTITANDIR = $$quote($$(QTITANDIR))
isEmpty(QTITANDIR):QTITANDIR = $$quote($$PWD/../../../)
include($$QTITANDIR/src/shared/qtitangrid.pri)

DESTDIR = $$QTITANDIR/bin
DESTDIR = $$member(DESTDIR, 0)$$QTITAN_LIB_PREFIX
DESTDIR = "$$DESTDIR"

android:ANDROID_PACKAGE_SOURCE_DIR=$$PWD/../../SQLFiles

!debug_and_release|build_pass {
    CONFIG(debug, debug|release) {
        TARGET = $$member(TARGET, 0)d
    }
}

HEADERS      += window.h

SOURCES      += main.cpp \
                window.cpp

include($$PWD/../../shared/DemoMainWindow.pri)

QT += widgets sql xml

macx {
    CONFIG-=app_bundle
}

QMAKE_CXXFLAGS -= FS

.py文件:

import sys, os
sys.path.append(os.path.dirname(os.path.realpath(__file__)) + "/../../shared")

from PySide2 import QtCore
from PySide2.QtCore import Qt, SIGNAL, SLOT, QTimer
from PySide2.QtGui import QPixmap
from PySide2.QtWidgets import (QWidget, QApplication, QVBoxLayout, QHBoxLayout, QPushButton,
                               QSlider, QLabel, QCheckBox, QComboBox, QMessageBox)
from PySide2.QtSql import QSqlDatabase, QSqlError, QSqlTableModel

from DevMachines import QtitanBase
from DevMachines.QtitanBase import Qtitan
from DevMachines.QtitanGrid import (getGridVersion, Grid, DBGrid, GridColumn, GridEditor,
                                    CellButtonClickEventArgs, ContextMenuEventArgs,
                                    EditorValidationEventArgs)

from DemoMainWindow import DemoMainWindow

class Window(DemoMainWindow):
    def __init__(self):
        DemoMainWindow.__init__(self, "QtitanDataGrid", getGridVersion())
        self.setWindowTitle(self.tr("Adding row to the grid possibility"))
        self.setGeometry(150, 150, 1000, 800)

        Grid.loadTranslation()

        self.grid = DBGrid()

        prefix = os.path.dirname(os.path.realpath(__file__))
        prefix += "/../../SQLFiles/assets"

        db = QSqlDatabase.addDatabase("QSQLITE", "database_demo")

        db.setDatabaseName(prefix + "/database.sqlite")
        db.setHostName("")
        db.setPort(-1)
        if not db.open("", ""):
            err = db.lastError()
            QSqlDatabase.removeDatabase("database_demo")
            QMessageBox.critical(self, "Demo Error", "Error: Can't open database " + db.databaseName() + ", error - " + err.text())
            QApplication.exit(1)
            return

        model = QSqlTableModel(self.grid, db)
        model.setTable("data")
        model.select()
        if model.lastError().type() != QSqlError.NoError:
            QMessageBox.critical(0, "Demo Error", "Error: SQL data base is not valid.")
            QApplication.exit(1)
            return

        model.setEditStrategy(QSqlTableModel.OnFieldChange)

        # Configure grid view
        self.grid.setViewType(Grid.BandedTableView)
        view = self.grid.view()
        view.options().setBandsHeader(False)
        view.options().setColumnAutoWidth(True)
        view.options().setRowAutoHeight(True)
        view.options().setNewRowPlace(Qtitan.AtBeginning)
        view.options().setNewRowHighlightEffect(Qtitan.AlphaEffect)

        # Connect Grid's context menu handler.
        self.connect(view, SIGNAL("contextMenu(ContextMenuEventArgs*)"), self,
                SLOT("contextMenu(ContextMenuEventArgs*)"))

        characteristicsBand = view.addBand("Characteristics")
        engineeringBand = view.addBand("Engineering")
        view.setModel(model)

        column = view.getColumnByModelColumnName("Photo")
        column = view.getColumnByModelColumnName("Registration")
        column.setBandIndex(characteristicsBand.index())
        column = view.getColumnByModelColumnName("Aircraft")
        column.setBandIndex(characteristicsBand.index())
        column = view.getColumnByModelColumnName("Location")
        column.setBandIndex(characteristicsBand.index())
        column.setRowIndex(1)
        column = view.getColumnByModelColumnName("Date")
        column.setBandIndex(characteristicsBand.index())
        column.setRowIndex(2)
        # Add cell button to the column.
        column.addButton(GridColumn.ClearButtonIcon, Qtitan.AtEnd, GridColumn.MouseOverPolicy)
        self.connect(column, SIGNAL("buttonClicked(CellButtonClickEventArgs*)"), self,
                    SLOT("cellButtonClicked(CellButtonClickEventArgs*)"))

        column = view.getColumnByModelColumnName("Photo")
        column.setEditorType(GridEditor.Picture)
        pictureEditor = column.editorRepository()

        column.setBandIndex(engineeringBand.index())
        column.setRowSpan(3)

        column = view.getColumnByModelColumnName("History")
        column.setEditorType(GridEditor.Memo)
        column.setBandIndex(engineeringBand.index())
        column.setRowSpan(3)

        # Add cell button to the column.
        column.addButton(GridColumn.ChoiceButtonIcon, Qtitan.AtEnd)
        self.connect(column, SIGNAL("buttonClicked(CellButtonClickEventArgs*)"), self,
                SLOT("cellButtonClicked(CellButtonClickEventArgs*)"))

        column = view.getColumnByModelColumnName("Info")
        column.setEditorType(GridEditor.Memo)
        column.setBandIndex(engineeringBand.index())
        column.setRowSpan(3)

        # Add cell button to the column.
        column.addButton(GridColumn.ChoiceButtonIcon, Qtitan.AtEnd)
        self.connect(column, SIGNAL("buttonClicked(CellButtonClickEventArgs*)"), self,
                SLOT("cellButtonClicked(CellButtonClickEventArgs*)"))

        # Show button menu for all column headers.
        for i in range(0, view.getColumnCount()):
            view.getColumn(i).setMenuButtonVisible(True)

        self.setDemoWidget(self.grid, self.createSettingsWidget())
        view.bestFit()

    def createSettingsWidget(self):
        settings = QWidget(self)
        l = QVBoxLayout(settings)
        placeLabel = QLabel(settings)
        placeLabel.setText(self.tr("Row pane place:"))
        newRowPosition = QComboBox(settings)
        newRowPosition.addItem("Top")
        newRowPosition.addItem("Bottom")
        newRowPosition.addItem("Hide")
        self.connect(newRowPosition, SIGNAL("activated(int)"), self, SLOT("newRowPositionActivated(int)"))
        placeLabel.setBuddy(newRowPosition)
        hl = QHBoxLayout()
        hl.addWidget(placeLabel)
        hl.addWidget(newRowPosition)
        l.addLayout(hl)

        effectLabel = QLabel(settings)
        effectLabel.setText(self.tr("Highlight effect:"))
        newRowEffect = QComboBox(settings)
        newRowEffect.addItem("Flash")
        newRowEffect.addItem("Alpha")
        self.connect(newRowEffect, SIGNAL("activated(int)"), self, SLOT("newRowEffectActivated(int)"))
        effectLabel.setBuddy(newRowEffect)
        hl = QHBoxLayout()
        hl.addWidget(effectLabel)
        hl.addWidget(newRowEffect)
        l.addLayout(hl)

        fastScrollCheck = QCheckBox(settings)
        fastScrollCheck.setText(self.tr("Fast scroll effect"))
        self.connect(fastScrollCheck, SIGNAL("stateChanged(int)"), self, SLOT("fastScrollChanged(int)"))
        l.addWidget(fastScrollCheck)
        fastScrollCheck.setChecked(True)

        dottedLineCheck = QCheckBox(settings)
        dottedLineCheck.setText(self.tr("Dotted grid line"))
        self.connect(dottedLineCheck, SIGNAL("stateChanged(int)"), self, SLOT("dottedLineChanged(int)"))
        l.addWidget(dottedLineCheck)
        dottedLineCheck.setChecked(True)

        label = QLabel(self)
        hl = QHBoxLayout()
        label.setText(self.tr("Grid line style:"))
        lineStylesSelect = QComboBox(settings)
        lineStylesSelect.addItem("None")
        lineStylesSelect.addItem("Both")
        lineStylesSelect.addItem("Both2D")
        lineStylesSelect.addItem("Horizontal")
        lineStylesSelect.addItem("Horizontal2D")
        lineStylesSelect.addItem("Vertical")
        lineStylesSelect.addItem("Vertical2D")
        self.connect(lineStylesSelect, SIGNAL("currentIndexChanged(int)"),
            self, SLOT("selectGridLineStyles(int)"))
        hl.addWidget(label)
        hl.addWidget(lineStylesSelect)
        l.addLayout(hl)
        lineStylesSelect.setCurrentIndex(2)

        zoomEnable = QCheckBox(settings)
        zoomEnable.setText(self.tr("Zoom enabled"))
        zoomEnable.setChecked(True)
        self.connect(zoomEnable, SIGNAL("stateChanged(int)"), self, SLOT("zoomEnabledChanged(int)"))
        l.addWidget(zoomEnable)

        zoomIndicator = QCheckBox(settings)
        zoomIndicator.setText(self.tr("Show zoom indicator"))
        zoomIndicator.setChecked(True)
        self.connect(zoomIndicator, SIGNAL("stateChanged(int)"), self, SLOT("zoomIndicatorChanged(int)"))
        l.addWidget(zoomIndicator)

        zoomSlider = QSlider(settings)
        zoomSlider.setOrientation(Qt.Horizontal)
        zoomSlider.setTickPosition(QSlider.TicksBothSides)
        zoomSlider.setMinimum(25)
        zoomSlider.setMaximum(300)
        zoomSlider.setTickInterval(25)
        zoomSlider.setSingleStep(25)
        zoomSlider.setValue(100)
        self.connect(zoomSlider, SIGNAL("sliderMoved(int)"), self, SLOT("zoomValueChanged(int)"))
        self.connect(self.grid.view(), SIGNAL("zoomChanged(int)"), zoomSlider, SLOT("setValue(int)"))
        l.addWidget(zoomSlider)

        airCheckBox = QCheckBox(settings)
        airCheckBox.setText(self.tr("Windows Air Support"))
        self.connect(airCheckBox, SIGNAL("stateChanged(int)"), self, SLOT("WindowsAirSupportChanged(int)"))
        airCheckBox.setChecked(False)
        l.addWidget(airCheckBox)

        cellAutoRaise = QCheckBox(settings)
        cellAutoRaise.setText(self.tr("Auto raise cell button"))
        self.connect(cellAutoRaise, SIGNAL("stateChanged(int)"), self, SLOT("cellButtonAutoRaiseEnabled(int)"))
        cellAutoRaise.setChecked(True)
        l.addWidget(cellAutoRaise)

        frozenRowsBox = QCheckBox(settings)
        frozenRowsBox.setText(self.tr("Frozen Rows"))
        self.connect(frozenRowsBox, SIGNAL("stateChanged(int)"), self, SLOT("frozenRowsEnabled(int)"))
        frozenRowsBox.setChecked(True)
        l.addWidget(frozenRowsBox)

        transparentBox = QCheckBox(settings)
        transparentBox.setText(self.tr("Transparent Background"))
        self.connect(transparentBox, SIGNAL("stateChanged(int)"), self, SLOT("transparentBackgroundEnabled(int)"))
        transparentBox.setChecked(False)
        l.addWidget(transparentBox)

        printButton = QPushButton(settings)
        printButton.setText(self.tr("Print Preview"))
        self.connect(printButton, SIGNAL("clicked()"), self, SLOT("printPreview()"))
        l.addWidget(printButton)
        return settings

    @QtCore.Slot(int)
    def newRowPositionActivated(self, index):
        view = self.grid.view()
        if index == 0:
            view.options().setNewRowPlace(Qtitan.AtBeginning)
        elif index == 1:
            view.options().setNewRowPlace(Qtitan.AtEnd)
        elif index == 2:
            view.options().setNewRowPlace(Qtitan.AtNone)

    @QtCore.Slot(int)
    def newRowEffectActivated(self, index):
        view = self.grid.view()
        if index == 0:
            view.options().setNewRowHighlightEffect(Qtitan.FlashEffect)
        else:
            view.options().setNewRowHighlightEffect(Qtitan.AlphaEffect)

    @QtCore.Slot(int)
    def fastScrollChanged(self, state):
        view = self.grid.view()
        view.options().setFastScrollEffect(state == Qt.Checked)

    @QtCore.Slot(int)
    def dottedLineChanged(self, state):
        view = self.grid.view()
        pen = view.options().gridLinePen()
        if state == Qt.Checked:
            pen.setStyle(Qt.DotLine)
        else:
            pen.setStyle(Qt.SolidLine)
        view.options().setGridLinePen(pen)

    @QtCore.Slot(int)
    def selectGridLineStyles(self, index):
        view = self.grid.view()
        if index == 0:
            view.options().setGridLines(Qtitan.LinesNone)
        elif index == 1:
            view.options().setGridLines(Qtitan.LinesBoth)
        elif index == 2:
            view.options().setGridLines(Qtitan.LinesBoth2D)
        elif index == 3:
            view.options().setGridLines(Qtitan.LinesHorizontal)
        elif index == 4:
            view.options().setGridLines(Qtitan.LinesHorizontal2D)
        elif index == 5:
            view.options().setGridLines(Qtitan.LinesVertical)
        elif index == 6:
            view.options().setGridLines(Qtitan.LinesVertical2D)
        else:
            view.options().setGridLines(Qtitan.LinesBoth)

    @QtCore.Slot(int)
    def zoomEnabledChanged(self, state):
        view = self.grid.view()
        view.options().setZoomEnabled(state == Qt.Checked)

    @QtCore.Slot(int)
    def zoomIndicatorChanged(self, state):
        view = self.grid.view()
        view.options().setZoomIndicatorActive(state == Qt.Checked)

    @QtCore.Slot(int)
    def zoomValueChanged(self, value):
        factor = (float(value) / 25) * 25
        view = self.grid.view()
        view.options().setZoomFactor(factor / 100)

    @QtCore.Slot(int)
    def WindowsAirSupportChanged(self, state):
        view = self.grid.view()
        view.options().setWindowsAirSupported(state == Qt.Checked)

    @QtCore.Slot(int)
    def cellButtonAutoRaiseEnabled(self, state):
        view = self.grid.view()
        view.options().setCellButtonAutoRaise(state == Qt.Checked)

    @QtCore.Slot(int)
    def frozenRowsEnabled(self, state):
        view = self.grid.view()
        view.options().setRowFrozenButtonVisible(state == Qt.Checked)
        view.options().setFrozenPlaceQuickSelection(state == Qt.Checked)

    @QtCore.Slot(int)
    def transparentBackgroundEnabled(self, state):
        view = self.grid.view()
        view.options().setTransparentBackground(state == Qt.Checked)
        view.options().setAlternatingRowColors(not view.options().alternatingRowColors())

    @QtCore.Slot(ContextMenuEventArgs)
    def contextMenu(self, args):
        args.contextMenu().addAction("Print Preview", self, SLOT("printPreview()"))
        args.contextMenu().addSeparator()
        args.contextMenu().addAction("Developer Machines on the Web", self, SLOT("showCompanyWebSite()"))

    @QtCore.Slot(CellButtonClickEventArgs)
    def cellButtonClicked(self, args):
        QMessageBox.information(self, "Cell button clicked",
            "Clicked: Button - " + str(args.buttonIndex()) + ", Column Title - " + args.column().caption() + ", RowIndex - " + str(args.row().rowIndex()))

    @QtCore.Slot()
    def printPreview(self):
        self.grid.view().printPreview()

    def setShadeColor(self, color):
        self.grid.themeManager().setShadeColor(color)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = Window()
    w.show()
    sys.exit(app.exec_())

.cpp文件:

#include <QApplication>

#include "window.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    Window window;
    window.show();
    return app.exec();
}

#include <QtGui>
#include <QDirModel>
#include <QtSql>
#include <QMessageBox>

#include "window.h"

Window::Window()
: DemoMainWindow(QStringLiteral("QtitanDataGrid"), QStringLiteral(QTN_VERSION_DATAGRID_STR), tr("Adding New Row to the grid possibility example"))
{
    Grid::loadTranslation();

    m_grid = new Qtitan::DBGrid(this);

#ifndef Q_OS_ANDROID
    QString path = QApplication::applicationDirPath();
    path += QStringLiteral("/../examples/SQLFiles/assets");
#else
    QString path = QDir::homePath();
    copyAssetFile(path, "database.sqlite");
#endif

    QSqlDatabase db = QSqlDatabase::addDatabase(QStringLiteral("QSQLITE"), QStringLiteral("database_demo"));
    db.setDatabaseName(path + QStringLiteral("/database.sqlite"));
    db.setHostName(QString());
    db.setPort(-1);
    if (!db.open(QString(), QString()))
    {
        QSqlError err = db.lastError();
        QSqlDatabase::removeDatabase(tr("database_demo"));
        QMessageBox::critical(0, tr("SQL Error"), tr("Error: Can't open database - %1, error - %2").arg(db.databaseName()).arg(err.text()));
        QApplication::exit(1);
        return;
    }

    QSqlTableModel* model = new QSqlTableModel(m_grid, db);
    model->setTable(QStringLiteral("data"));
    model->select();
    if (model->lastError().type() != QSqlError::NoError)
    {
        QMessageBox::critical(0, tr("SQL Error"), tr("Error: SQL data base is not valid."));
        QApplication::exit(1);
        return;
    }
    model->setEditStrategy(QSqlTableModel::OnFieldChange);

    // Configure grid view
    m_grid->setViewType(Qtitan::Grid::BandedTableView);
    Qtitan::GridBandedTableView* view = m_grid->view<Qtitan::GridBandedTableView>();
    view->options().setBandsHeader(false);
    view->options().setColumnAutoWidth(true);
    view->options().setRowAutoHeight(true);
    view->options().setNewRowPlace(Qtitan::AtBeginning);
    view->options().setNewRowHighlightEffect(Qtitan::AlphaEffect);
    view->options().setSupportedDropActions(Qt::CopyAction);
    view->options().setModelItemsDragEnabled(true);

    //Connect Grid's context menu handler.
    connect(view, SIGNAL(contextMenu(ContextMenuEventArgs*)), this, SLOT(contextMenu(ContextMenuEventArgs* )));

    Qtitan::GridTableBand* characteristicsBand = view->addBand(tr("Characteristics"));
    Qtitan::GridTableBand* engineeringBand = view->addBand(tr("Engineering"));
    view->setModel(model);

    Qtitan::GridBandedTableColumn* column = (Qtitan::GridBandedTableColumn *)view->getColumnByModelColumnName(tr("Photo"));
    column = (Qtitan::GridBandedTableColumn *)view->getColumnByModelColumnName(tr("Registration"));
    column->setBandIndex(characteristicsBand->index());
    column = (Qtitan::GridBandedTableColumn *)view->getColumnByModelColumnName(tr("Aircraft"));
    column->setBandIndex(characteristicsBand->index());
    column = (Qtitan::GridBandedTableColumn *)view->getColumnByModelColumnName(tr("Location"));
    column->setBandIndex(characteristicsBand->index());
    column->setRowIndex(1);
    column = (Qtitan::GridBandedTableColumn *)view->getColumnByModelColumnName(tr("Date"));
    column->setBandIndex(characteristicsBand->index());
    column->setRowIndex(2);
    //Add cell button to the column.
    column->addButton(GridColumn::ClearButtonIcon, Qtitan::AtEnd, GridColumn::MouseOverPolicy);
    connect(column, SIGNAL(buttonClicked(CellButtonClickEventArgs*)), this, SLOT(cellButtonClicked(CellButtonClickEventArgs*)));

    column = (Qtitan::GridBandedTableColumn *)view->getColumnByModelColumnName(tr("Photo"));
    column->setEditorType(GridEditor::Picture);
    Qtitan::GridPictureEditorRepository* pictureEditor = (Qtitan::GridPictureEditorRepository *)column->editorRepository();
    Q_UNUSED(pictureEditor);
    column->setBandIndex(engineeringBand->index());
    column->setRowSpan(3);

    column = (Qtitan::GridBandedTableColumn *)view->getColumnByModelColumnName(tr("History"));
    column->setEditorType(GridEditor::Memo);
    column->setBandIndex(engineeringBand->index());
    column->setRowSpan(3);
    //Add cell button to the column.
    column->addButton(GridColumn::ChoiceButtonIcon, Qtitan::AtEnd);
    connect(column, SIGNAL(buttonClicked(CellButtonClickEventArgs*)), this, SLOT(cellButtonClicked(CellButtonClickEventArgs*)));

    column = (Qtitan::GridBandedTableColumn *)view->getColumnByModelColumnName(tr("Info"));
    column->setEditorType(GridEditor::Memo);
    column->setBandIndex(engineeringBand->index());
    column->setRowSpan(3);
    //Add cell button to the column.
    column->addButton(GridColumn::ChoiceButtonIcon, Qtitan::AtEnd);
    connect(column, SIGNAL(buttonClicked(CellButtonClickEventArgs*)), this, SLOT(cellButtonClicked(CellButtonClickEventArgs*)));

    //Show button menu for all column headers.
    for (int i = 0; i < view->getColumnCount(); ++i)
        static_cast<GridTableColumn *>(view->getColumn(i))->setMenuButtonVisible(true);

    setDemoWidget(m_grid, createSettingsWidget());

    view->bestFit();
}

QWidget* Window::createSettingsWidget()
{
    QWidget* settings = new QWidget(this);
    QVBoxLayout* l = new QVBoxLayout(settings);

    QCheckBox* checkBox = new QCheckBox(settings);
    checkBox->setText(tr("Show Resize Content (new)"));
    connect(checkBox, SIGNAL(stateChanged(int)), this, SLOT(showResizeContentChanged(int)));
    checkBox->setChecked(true);
    l->addWidget(checkBox);

    QLabel* placeLabel = new QLabel(settings);
    placeLabel->setText(tr("New Row pane place:"));
    QComboBox* newRowPosition = new QComboBox(settings);
    newRowPosition->addItem(tr("Top"));
    newRowPosition->addItem(tr("Bottom"));
    newRowPosition->addItem(tr("Hide"));
    connect(newRowPosition, SIGNAL(activated(int)), this, SLOT(newRowPositionActivated(int)));
    placeLabel->setBuddy(newRowPosition);
    QHBoxLayout* hl = new QHBoxLayout(0);
    hl->addWidget(placeLabel);
    hl->addWidget(newRowPosition);
    l->addLayout(hl);

    QLabel* effectLabel = new QLabel(settings);
    effectLabel->setText(tr("Highlight effect:"));
    QComboBox* newRowEffect = new QComboBox(settings);
    newRowEffect->addItem(tr("Flash"));
    newRowEffect->addItem(tr("Alpha"));
    connect(newRowEffect, SIGNAL(activated(int)), this, SLOT(newRowEffectActivated(int)));
    effectLabel->setBuddy(newRowEffect);
    hl = new QHBoxLayout(0);
    hl->addWidget(effectLabel);
    hl->addWidget(newRowEffect);
    l->addLayout(hl);

    QCheckBox* fastScrollCheck = new QCheckBox(settings);
    fastScrollCheck->setText(tr("Fast scroll effect"));
    connect(fastScrollCheck, SIGNAL(stateChanged(int)), this, SLOT(fastScrollChanged(int)));
    l->addWidget(fastScrollCheck);
    fastScrollCheck->setChecked(true);

    QCheckBox* dottedLineCheck = new QCheckBox(settings);
    dottedLineCheck->setText(tr("Dotted grid line"));
    connect(dottedLineCheck, SIGNAL(stateChanged(int)), this, SLOT(dottedLineChanged(int)));
    l->addWidget(dottedLineCheck);
    dottedLineCheck->setChecked(true);

    QLabel* label = new QLabel(this);
    hl = new QHBoxLayout(0);
    label->setText(tr("Grid line style:"));
    QComboBox* lineStylesSelect = new QComboBox(settings);
    lineStylesSelect->addItem(tr("None"));
    lineStylesSelect->addItem(tr("Both"));
    lineStylesSelect->addItem(tr("Both2D"));
    lineStylesSelect->addItem(tr("Horizontal"));
    lineStylesSelect->addItem(tr("Horizontal2D"));
    lineStylesSelect->addItem(tr("Vertical"));
    lineStylesSelect->addItem(tr("Vertical2D"));
    connect(lineStylesSelect, SIGNAL(currentIndexChanged(int)), this, SLOT(selectGridLineStyles(int)));
    hl->addWidget(label);
    hl->addWidget(lineStylesSelect);
    l->addLayout(hl);
    lineStylesSelect->setCurrentIndex(2);

    QCheckBox* zoomEnable = new QCheckBox(settings);
    zoomEnable->setText(tr("Zoom enabled"));
    zoomEnable->setChecked(true);
    connect(zoomEnable, SIGNAL(stateChanged(int)), this, SLOT(zoomEnabledChanged(int)));
    l->addWidget(zoomEnable);

    QCheckBox* zoomIndicator = new QCheckBox(settings);
    zoomIndicator->setText(tr("Show zoom indicator"));
    zoomIndicator->setChecked(true);
    connect(zoomIndicator, SIGNAL(stateChanged(int)), this, SLOT(zoomIndicatorChanged(int)));
    l->addWidget(zoomIndicator);

    QSlider* zoomSlider = new QSlider(settings);
    zoomSlider->setOrientation(Qt::Horizontal);
    zoomSlider->setTickPosition(QSlider::TicksBothSides);
    zoomSlider->setMinimum(25);
    zoomSlider->setMaximum(300);
    zoomSlider->setTickInterval(25);
    zoomSlider->setSingleStep(25);
    zoomSlider->setValue(100);
    connect(zoomSlider, SIGNAL(sliderMoved(int)), this, SLOT(zoomValueChanged(int)));
    connect(m_grid->view<Qtitan::GridTableView>(), SIGNAL(zoomChanged(int)), zoomSlider, SLOT(setValue(int)));
    l->addWidget(zoomSlider);

    QCheckBox* cellAutoRaise = new QCheckBox(settings);
    cellAutoRaise->setText(tr("Auto raise cell button"));
    connect(cellAutoRaise, SIGNAL(stateChanged(int)), this, SLOT(cellButtonAutoRaiseEnabled(int)));
    cellAutoRaise->setChecked(true);
    l->addWidget(cellAutoRaise);

    QCheckBox* frozenRowsBox = new QCheckBox(settings);
    frozenRowsBox->setText(tr("Frozen Rows"));
    connect(frozenRowsBox, SIGNAL(stateChanged(int)), this, SLOT(frozenRowsEnabled(int)));
    frozenRowsBox->setChecked(true);
    l->addWidget(frozenRowsBox);

    QCheckBox* transparentBox = new QCheckBox(settings);
    transparentBox->setText(tr("Transparent Background"));
    connect(transparentBox, SIGNAL(stateChanged(int)), this, SLOT(transparentBackgroundEnabled(int)));
    transparentBox->setChecked(false);
    l->addWidget(transparentBox);

    QCheckBox* rowSizingBox = new QCheckBox(settings);
    rowSizingBox->setText(tr("Resizing row (new)"));
    connect(rowSizingBox, SIGNAL(stateChanged(int)), this, SLOT(rowSizingEnabled(int)));
    rowSizingBox->setChecked(false);
    l->addWidget(rowSizingBox);

    QPushButton* printButton = new QPushButton(settings);
    printButton->setText(tr("Print Preview"));
    connect(printButton, SIGNAL(clicked()), this, SLOT(printPreview()));
    l->addWidget(printButton);
    return settings;
}

void Window::newRowPositionActivated(int index)
{
    Qtitan::GridTableView* view = m_grid->view<Qtitan::GridTableView>();

    switch (index)
    {
    case 0:
        view->options().setNewRowPlace(Qtitan::AtBeginning);
        break;
    case 1:
        view->options().setNewRowPlace(Qtitan::AtEnd);
        break;
    default:
        view->options().setNewRowPlace(Qtitan::AtNone);
    }
}

void Window::newRowEffectActivated(int index)
{
    Qtitan::GridTableView* view = m_grid->view<Qtitan::GridTableView>();

    switch (index)
    {
    case 0:
        view->options().setNewRowHighlightEffect(Qtitan::FlashEffect);
        break;
    case 1:
        view->options().setNewRowHighlightEffect(Qtitan::AlphaEffect);
        break;
    default:
        view->options().setNewRowHighlightEffect(Qtitan::AlphaEffect);
    }
}

void Window::fastScrollChanged(int state)
{
    Qtitan::GridTableView* view = m_grid->view<Qtitan::GridTableView>();
    view->options().setFastScrollEffect(state == Qt::Checked);
}

void Window::dottedLineChanged(int state)
{
    Qtitan::GridTableView* view = m_grid->view<Qtitan::GridTableView>();
    QPen pen = view->options().gridLinePen();
    pen.setStyle(state == Qt::Checked ? Qt::DotLine : Qt::SolidLine);
    view->options().setGridLinePen(pen);
}

void Window::selectGridLineStyles(int index)
{
    Qtitan::GridTableView* view = m_grid->view<Qtitan::GridTableView>();
    switch (index)
    {
    case 0:
        view->options().setGridLines(Qtitan::LinesNone);
        break;
    case 1:
        view->options().setGridLines(Qtitan::LinesBoth);
        break;
    case 2:
        view->options().setGridLines(Qtitan::LinesBoth2D);
        break;
    case 3:
        view->options().setGridLines(Qtitan::LinesHorizontal);
        break;
    case 4:
        view->options().setGridLines(Qtitan::LinesHorizontal2D);
        break;
    case 5:
        view->options().setGridLines(Qtitan::LinesVertical);
        break;
    case 6:
        view->options().setGridLines(Qtitan::LinesVertical2D);
        break;
    default:
        view->options().setGridLines(Qtitan::LinesBoth);
    }
 }

void Window::selectViewOrientation(int index)
{
    Qtitan::GridTableView* view = m_grid->view<Qtitan::GridTableView>();
    switch (index)
    {
    case 0:
        {
            view->options().setViewOrientation(Qt::Vertical);

            Qtitan::GridBandedTableColumn* column = (Qtitan::GridBandedTableColumn *)view->getColumnByModelColumnName(tr("Location"));
            column->setRowIndex(1);
            column = (Qtitan::GridBandedTableColumn *)view->getColumnByModelColumnName(tr("Date"));
            column->setRowIndex(2);
        }
        break;
    case 1:
        {
            view->options().setViewOrientation(Qt::Horizontal);

            Qtitan::GridBandedTableColumn* column = (Qtitan::GridBandedTableColumn *)view->getColumnByModelColumnName(tr("Location"));
            column->setRowIndex(0);
            column = (Qtitan::GridBandedTableColumn *)view->getColumnByModelColumnName( tr("Date"));
            column->setRowIndex(0);
        }
        break;
    default:
        break;
    }
}

void Window::zoomEnabledChanged(int state)
{
    Qtitan::GridTableView* view = m_grid->view<Qtitan::GridTableView>();
    view->options().setZoomEnabled(state == Qt::Checked);
}

void Window::zoomIndicatorChanged(int state)
{
    Qtitan::GridTableView* view = m_grid->view<Qtitan::GridTableView>();
    view->options().setZoomIndicatorActive(state == Qt::Checked);
}

void Window::zoomValueChanged(int value)
{
    double factor = qCeil((double)value / 25) * 25;
    Qtitan::GridTableView* view = m_grid->view<Qtitan::GridTableView>();
    view->options().setZoomFactor(factor / 100);
}

void Window::showResizeContentChanged(int state)
{
    Qtitan::GridTableView* view = m_grid->view<Qtitan::GridTableView>();
    view->options().setShowResizeContent(state == Qt::Checked);
}

void Window::cellButtonAutoRaiseEnabled(int state)
{
    Qtitan::GridTableView* view = m_grid->view<Qtitan::GridTableView>();
    view->options().setCellButtonAutoRaise(state == Qt::Checked);
}

void Window::frozenRowsEnabled(int state)
{
    Qtitan::GridTableView* view = m_grid->view<Qtitan::GridTableView>();
    view->options().setRowFrozenButtonVisible(state == Qt::Checked);
    view->options().setFrozenPlaceQuickSelection(state == Qt::Checked);
}

void Window::transparentBackgroundEnabled(int state)
{
    Qtitan::GridTableView* view = m_grid->view<Qtitan::GridTableView>();
    view->options().setTransparentBackground(state == Qt::Checked);

    view->options().setAlternatingRowColors(!view->options().alternatingRowColors());
}

void Window::rowSizingEnabled(int state)
{
    Qtitan::GridTableView* view = m_grid->view<Qtitan::GridTableView>();
    view->options().setRowSizingEnabled(state == Qt::Checked);
}

void Window::contextMenu(ContextMenuEventArgs* args)
{
    args->contextMenu()->addAction(tr("Print Preview"), this, SLOT(printPreview()));
    args->contextMenu()->addSeparator();
    args->contextMenu()->addAction(tr("Developer Machines on the Web"), this, SLOT(showCompanyWebSite()));
}

void Window::cellButtonClicked(CellButtonClickEventArgs* args)
{
    QMessageBox::information(this, tr("Cell button clicked"),
        tr("Clicked: Button - %1, Column Title - %2, RowIndex - %3").arg(args->buttonIndex()).arg(args->column()->caption()).arg(args->row().rowIndex()));
}

void Window::printPreview()
{
    m_grid->view<Qtitan::GridTableView>()->printPreview();
}

void Window::setShadeColor(const QColor& color)
{
    m_grid->themeManager()->setShadeColor(color);
}

.h文件:

#ifndef WINDOW_H
#define WINDOW_H

#include <QComboBox>
#include <QLabel>
#include <QCheckBox>
#include <QtitanDBGrid.h>

#include "DemoMainWindow.h"

class Window : public DemoMainWindow
{
    Q_OBJECT
public:
    Window();
    QWidget* createSettingsWidget();
private Q_SLOTS:
    void newRowPositionActivated(int index);
    void newRowEffectActivated(int index);
    void fastScrollChanged(int state);
    void dottedLineChanged(int state);
    void selectGridLineStyles(int index);
    void selectViewOrientation(int index);
    void zoomEnabledChanged(int state);
    void zoomIndicatorChanged(int state);
    void cellButtonAutoRaiseEnabled(int state);
    void frozenRowsEnabled(int state);
    void transparentBackgroundEnabled(int state);
    void rowSizingEnabled(int);
    void contextMenu(ContextMenuEventArgs* args);
    void cellButtonClicked(CellButtonClickEventArgs* args);
    void printPreview();
    void setShadeColor(const QColor& color);
    void zoomValueChanged(int value);
    void showResizeContentChanged(int state);
private:
    Qtitan::DBGrid* m_grid;
};

#endif

點擊獲取更多文章教程!現在立刻下載Qt免費試用吧!更多Qt類開發工具QtitanRibbonQtitanChart、QtitanNavigation、QtitanDocking、QtitanDataGrid在線訂購現直降1000元,歡迎咨詢慧都獲取更多優惠>>

工具推薦:

  • QtitanRibbon| 下載試用: 遵循Microsoft Ribbon UI Paradigm for Qt技術的Ribbon UI組件,致力于為Windows、Linux和Mac OS X提供功能完整的Ribbon組件。
  • QtitanChart | 下載試用 :是一個C ++庫,代表一組控件,這些控件使您可以快速地為應用程序提供漂亮而豐富的圖表。并且支持所有主要的桌面操作系統

標簽:

本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn

文章轉載自:

為你推薦

  • 推薦視頻
  • 推薦活動
  • 推薦產品
  • 推薦文章
  • 慧都慧問
掃碼咨詢


添加微信 立即咨詢

電話咨詢

客服熱線
023-68661681

TOP
丰满人妻少妇一区二区三区av | 国产精品嫩草影院在线 | 人妻少妇精品无码专区漫画 | 欧美日韩在线在线观看 | 高清在线午夜一区二区亚洲 | 成人av免费视频在线观看 | 亚洲aⅴ无码精品一区二区三区 | 色偷偷超碰av男人天堂 | 国产白丝jk捆绑束缚调教视频 | 亚洲国产天堂αv日本国产 亚洲国产天堂久久综合 | 在线a亚洲视频播放在线观看 | 中文字幕乱码一区二区av | 日本欧美一区二区三区乱码 | 偷拍亚洲一区二区三区 | 国产香蕉视频 | 亚洲欧美国产高清 | 东京无码熟妇人妻av在线网址 | 麻豆av天堂| 欧美午夜不卡在线观看 | 丰满岳乱妇在线观看中字无码 | 国产成人精品麻豆视频 | 丰满少妇高潮惨叫久久久 | 日本在线国产 | 国产精品天干天干在线观看 | 亚洲国产av无码精品果冻传媒 | 欧美揉bbbbb揉bbbbb | 成人网站精品久久久久 | 狠狠精品干练久久久无码中文字幕 | av不卡激情在 | 99精品无码一区二区毛片免费 | 91精品国产爱久久久久久 | 国产v片在线播放免费无遮挡 | 日韩无码系列综合区 | 国产伦精品一区三区视频 | 国产成a人片在线观看视频 国产成a人片在线观看视频9 | 国产精品福利一区 | 九月婷婷人人澡人人 | 日韩精品高清在线 | 岛国av无码专区免费看 | 日韩无码精品一区 | 精品国产一区二区三区2025 | 日韩人妻系列无码专区三级 | 少妇人妻久久久久久97人妻 | 国产精品一区二区久久精品 | 日日摸日日碰夜夜爽无码 | 日本无乱码高清在线观看 | 国产在线观看免费视频在线 | 无码特色毛片在线播放 | 特级丰满少妇一级aaaa爱毛 | 亚洲成a人片在线观看 | 国产良妇出轨视频在线观看 | 国产免费久久精品99re丫 | 成人高清在线观看www在线 | 精品久久久久久久久一起玩 | 午夜成人亚洲理论片在线观看 | 精品久久香蕉国产线 | 亚洲精品高清av在线播放 | 亚洲国产精品va在线观看麻豆 | 国产黄色视频在线观看 | 99久久国产精品免费一区二区 | 99999久久久久久亚洲 | 九九热在线视频观看这里只有精品 | 国产农村妇女精品一二区 | av天堂最新一区二区三区 | 国产欧美日韩一区二区三区 | 国产小视频在线观看 | 97国产婷婷综合在线视 | 在线视频 | 97se狠狠狠狼鲁亚洲综合网 | 亚洲福利网站 | 97视频在线观看精品 | 成人久久网国产精品五月天 | 国产精品自产拍在线观看55 | 国产办公室无码视频在线观看 | 狠狠色丁香久久婷婷综合五月 | 99久久精品费精品国产一区二区 | 午夜精品国产电影在线观看 | 欧美一区二区三区精品 | 国产成人精品日本亚洲专 | 国产成人乱色伦区 | 很黄很色很爽的三级视频 | 91麻豆精品一二三区在线 | 日韩a级片| 色男人窝网站聚色窝 | 波多野结衣2完整版电影在线 | 丰满人妻跪趴高撅肥臀玄幻小说 | 国产日韩精品一区二区在线观 | 99久热在线精品996热是什么 | 国产草草影院一区二区三区 | 久久不见久久见免费影院www | 99精品视频久久精品视频 | 亚洲精品国产成人片 | 国产农村妇女精品一二区 | 亚洲午夜福利在线视频 | a天堂视频在线观看 | 国产成人av大片大片在线播放 | 丰满人妻跪趴高撅肥臀 | 91精品福利视频在线观看 | 精品国产免费第一区二区 | 欧美精品午夜 | 国产aa免费视频观看网站 | 99精品国产高清一区二区三区香蕉 | 精品一区二区三区东京热 | 国产口爆吞精在线视频 | 久久91亚洲精品久久91综合 | 国产樱花草青青草 | 91孕妇精品一区二区三区 | 亚洲av无码专区在线观 | 91游游戏中心官网手游最新版下载 | 天堂网资源www | 99热国产在线手机精品 | 97在线观看视频免费 | 韩国三级中文字幕hd无码 | 成人国产精品日本在线观看 | av收藏夹在线观看视频 | 久久99热66这里只有精品一 | 亚洲国产va乱码毛片一级高清三 | 国产老妇女牲交视频 | 天堂一区二区在线观看视频 | 国产精品国产三级国产av中文 | 欧美成人精品一区二三区在线观看 | 国产日本高清在线观看 | 日韩精品亚洲人成在线观看亚洲 | 羞羞影院午夜男女爽爽免费 | 欧美日韩在线免费一区二区三区 | 少妇高潮惨叫久久久久久 | 在线观看亚洲av日韩a∨ | 加勒比在线一区二区三区 | 国产成年无码v片在线 | 91久久香蕉国产线看观看软件 | 精品国产综合成人亚 | 最新国产剧高清免vip在线观看 | 日韩欧美亚洲动漫综合 | 国语精品91自产拍在 | 在线观看免费午夜大片 | 国产乱视频在线观看 | 人人超碰91尤物精品国产 | 日韩欧美一区二区三区 | 欧美色蜜桃97中文字幕在线播放 | 香蕉视频在线观看免费 | 欧美日韩免费高清一区二区三区 | 91丝袜精品诱惑在线观看 | 99久久精品国产 | 97久久精品人妻人人搡人人玩 | 91嫩草私人成人亚洲影院 | 亚洲av成人无码一 | 国产精品福利在线观看免费不卡 | 91精品夜夜夜一区二区 | 精品蜜臀国产aⅴ一区二区三区 | 性无码一区二区三区在线观看 | 精品九九99久久人妻免费 | 国产乱子伦 | 精品一区二区三区免费播放 | 亚洲欧美日韩精品久久 | 91大神一区二区三区视频 | 日韩精品一区二区三区蜜桃 | 精品91自产拍在线观看精品 | 亚洲国产电影久久 | 97精品一区二区视频在线观看 | 办公室的丰满秘书cd | 国产精品69白浆在线观看免费 | 白丝受辱:不堪遭遇引发争议 | 国产成人欧美日本在线观看 | 波多野结衣2完整版电影在线 | 无遮挡1000部拍拍拍免费观看 | 亚洲成av人影院在线观看 | 日本免费一区二区三区久久 | 三级网站在线免费观看 | a级成人婬片免费看 | 99永久aⅴ免费视频 99永久视频在线观看免费 | 91桃色永久免费福利版下载 | 中文字幕乱码无码人妻系列蜜 | 国产黃色精品三級一区二区 | 99久久国产热无码精品免费久久久久 | 在线观看一级国产 | 日本视频在线免费观看 | 亚洲中文字幕久久精品无码app | 国产精品自拍午夜福利在线播放 | 伊人色综合视频一区二区三区 | 欧洲无码| 欧美日韩精品一区二区三区高清视频 | 国产v欧美v亚洲v日本久久 | 国内精品中文 | 午夜影院一区二区三区 | 亚洲处破女www | 日本精品一区二 | 精品一区二区在线观看国产 | 精品久久久久久久无码人妻热 | 国产精品一区在线观看播放 | 成人毛片18女人毛片免费看 | 国产午夜福利精品一区二区三区 | 色综合久久精品亚洲国产 | 国产一区二区三区精品尤物 | 99久久亚洲国产高清观看 | 精品国产v无码大片在线观看 | 午夜福利在线观看大片 | 国产精品宾馆在线精品酒店 | 国产无套视频在线观看aa在线 | 亚洲精品亚洲人成在线下载 | 亚洲荡妇在线观看 | av在线亚洲男人的天堂 | 午夜视频体内射.com.com | 狠狠躁夜夜躁人人爽天天开心 | 日本高清一级婬片a级中文字幕 | 另娄专区欧美制服在线亚洲欧 | 在线播放国 | 91av色| 亚洲国产欧美国产综合一区 | 精品国产群3p在线观看91 | 亚洲伊人成综合网 | 国产农村妇女精品一二区 | 东京热中文字幕aⅴ专区 | 亚洲日本乱码一区二区产线一∨ | 91成人在线观看 | 激情综合网+黄色成人网 | 国产激情久久久久影院老熟女 | 免费一级a毛片在线播放 | 国偷自产aⅴ一区 | 人妻精品少妇二区 | 91精品国产乱码在线观看 | a篇片在线观看网站 | 国产寻花视频在线播放 | 亚洲另类中文字幕 | 99精品热在线观看视频88 | 超碰97人人做人人爱少妇 | 国产欧美日韩视频在线观看 | 国产偷规视频在线观看 | 日本h纯肉无遮掩3d动漫在线观 | 亚洲一区在线视频 | 国产精品99久久99久久久 | 国产精品自产拍在线观看涩 | 成人国产一区二区三区 | 婷婷在线视频 | 成人涩涩小片视频日本 | 亚洲精品无码av人在线播放 | 国产人妖在线 | 国产精品精品久久久久久一 | 无码日韩av一区二区三区 | av无码免费岛 | 日韩精品无码一区二区三区不卡 | 99精品国产在热久久无毒 | 91蜜桃传媒精品久久久一区二区 | 欧美va天堂v国产综合 | 精品人无 | 亚洲精品第一国产综合麻豆 | 欧美日韩国产免费一区二 | 99精品国产在热久久国产乱 | 国产亚洲精品综合在线 | 午夜人性色福利 | 国产精品午夜一区二区 | 国产专区亚洲精品无码 | 97视频在线精品国自产拍 | 风流老太婆大bbwbbwhd视频 | 中文字幕久久精品乱码乱码 | 成人毛片无码一区二区三区 | 国产日韩亚洲 | 国产交换配 | 国产剧情日韩 | 亚洲综合无码无在线观看 | 一区二区三区视频 | 黄色免费网址在线观看 | 国产成人综合亚洲av网站 | av免费福利网址网站 | 97人妻免费视频 | 无码国产精品一区二区免费久久 | 欧洲女人牲交视频免费 | 91麻豆女人丰 | 三上悠亚久久精品 | 国产旗袍丝袜在线观看视频 | 91在线国内在线地址发布 | 国内精品久久久 | 午夜亚洲精品不卡在线观看 | 91九色老熟女免费 | 狠狠操一区| 午夜精品久久久久久久无码 | 黄色三级电影久久 | 亚洲av无码一区二区三区dv | 国产99在线播放 | 久久高清内射无套 | 在线亚洲午夜理论av大片 | 欧美日韩国产高清视频 | 国产成人啪精品午夜在线观看 | 国产成人精品久久一区二区精品 | 国产日本在线播放 | 成人精品视频99 | 亚洲av成人一区二区三区观看 | 丰满岳乱 | 国产精品免费视频一区二区三 | 欧美牲交a欧美 | 成年永久一区二区三区免费视频 | 97蜜桃| 亚洲午夜精品成人毛片 | 日韩成人精品一区二区三区 | 国产精品国产高清国产av | 亚洲av婷婷一区二区三区网站 | 九色91popny国产老熟女 | 国产精品综合网 | 国产福利在线观看麻豆 | 91av剧情免费在线看片 | 国产一区av在线 | 国产在线精品91国自产拍免费 | 天堂网www最新版资源在线 | 婷婷在线观看视频免费播放 | 岛国av无码专区免费看 | 国内精品久久久视频 | 亚洲精品乱码久久久久久v 亚洲精品乱码久久久久久不卡 | 99久久免费只有精品国产 | 亚洲日本中文字幕天天更新 | 精品入口欧亚色大 | 亚洲午夜成人精品电影在线观看 | 日日摸夜夜摸狠狠摸婷婷 | 色一情一乱一伦一区二区三区 | 国产精品福利电影一区二 | 日韩欧美中文字幕54av | 亚洲乱码国产乱码精品精 | 亚洲av美女一区二区三区 | 久久大香蕉 | 亚洲国产欧美在线人成 | 日韩毛片在 | 日韩亚av无码一区二区三区 | 天美传媒果冻传媒入口 | 日本久久精品视频 | 精品国产乱码久久久久夜深人妻 | 国产精品扒开腿内射爽爽 | 国产在线播放线99视频大全 | 亚洲国产精品嫩草影院久久 | 国产高清不卡一区二区在线视频 | 黄视亚洲欧洲日韩频在线观看 | 亚洲无码小视频 | 国产成人亚洲综合无码ⅴ | 国产精品永久在线影视 | 日本三级欧美三级人妇视频 | 操美女视频 | 国产成年无码av片在线韩国 | 自拍偷在线精品自拍偷 | 精品少妇ay一区二区三区 | 一区二区三区精品视频 | 91传媒在线观看视频 | 亚洲无码在线观看视频免费 | 国产精品无码dvd在线观看 | av喷水高潮喷水在线观看 | 日本视频久久 | 亚洲国产精品嫩草影院久久 | 天美传媒国色天香乱码 | 99视频网| 97嫩草国产在线观看www免费 | 色综合99久久久无码国产精品 | 亚洲国产精品一区二区久久 | 91视频香蕉黄视频 | 午夜国产精品理论片久久影院 | 欧美精品一区二区三区91 | 欧美成人精品视频在线播放 | 午夜视频在线观看网站 | 国产一级国产一级在线观看 | 无码久久久久久久久蜜臀 | 91丝袜在线观看 | 亚洲国区二区三区 | 欧美真人抽搐一进一出gif | 岛国一区二区在线观看蜜 | 国产美女白嫩嫩在线观看 | 超碰伊人久久青 | 99久久国产精品免费一区二区 | 天天综合色天天综合色hd | 高清亚洲香蕉在线播放av | 国产三级一区二区三区 | 亚洲精品午夜久久aaa级久久久 | 91精品一区二区综合在线 | 午夜免费啪在线观看视频 | 波多野结衣的图片 | 精品亚洲成a人在线看片 | 国产亚洲精品一级在线观看 | 成人精品久久国产av | 99久无码中文字幕 | 韩国三级在线观看中文字幕 | 国产白丝喷水娇喘视频 | 日韩成人精品视频国产在线观看成人 | 后入翘臀少妇一区二区三区 | 色综合天天综合网在线观看 | 国语对白露脸在线播放 | 亚洲午夜久久久影院伊人 | 亚洲av成人无码精品综合网站 | 国产ts系列赵恩静在线观看 | 国产在线视频二区不卡 | 欧美日韩精品视频一区二区在线 | 国产精品无码无卡无需播放器 | 波多野结衣的图片 | 久久国产成人午夜av影院 | 国产在线98福利播放视频 | 中文无码第3页不卡av | 一区二区三区精品视频日韩 | 中文字幕爆乳巨爆乳系列无码 | 国产一级做a爱片久久毛片 国产一级做a爰片久久毛 | 性生大片免费观看性 | 国产精品爽黄69天堂a | 91精品综合久久久久久五月天 | 一区二区三区国产精品保安 | 十大最污日本动漫都是少儿不宜啊! | 色魅99av| 女自慰喷潮久久久www | 成年入口无限观看免费完整大片 | 中文字幕丰满乱孑伦 | 亚洲精品v天堂中文字幕 | 国产免费视频 | 成人精品视频一区二区 | 亚洲综合一区二 | 国模冰莲自慰肥美胞极品人体图 | 91色老久久精品偷偷蜜臀 | 欧美最猛性xxxxxx | 免费无码成人av在线播放不卡 | 国产无码高清视频不卡 | 色色福利| 美女18禁黄无遮挡网站 | 亚洲精品成人久久久影院 | 99re视频免 | 国产黄色视频在线观看免费 | 97狠狠干五月天 | 色色精品久久久久 | 天天爽夜夜爽夜夜爽精品视频 | 午夜免费观看福利片一区二 | 无码午夜性爱视频 | 国产精品1024在线永久 | 91亚洲国产第一精品 | 国产91在线直播高清完整版 | 国产精品综合av一区二区 | 色一情一区二 | 亚洲成α人片在线观看欧美在线视频 | 91无限观看次数破解版安卓版 | 99久久久无码国产精品免费 | 国产91中文在线播放 | 亚洲av无码免费成人av | 丝瓜视频涩涩屋色多多色版成人 | а√天堂网www在线搜索 | 中文字幕人妻 | 丰满少妇愉情中文字幕18禁片 | www毛片| 亚洲av无码一区二区三区观看 | 91国精产品秘一区二区三区有何不同 | 狠狠综合久久久久精品网站 | 91尤物免费在线观看精品 | 99久久精品九九亚洲精品 | 99久久婷婷国产综合精品青草免 | 国产免费一区二区三区在线 | 国产成本| 亚洲午夜成人精品无码91 | 欧美精品第一页 | 亚洲成人| 精品少妇人妻av免费久久洗澡 | 亚洲gv猛男gv无码男同 | 91成年人免费视频 | 高潮爽到爆的喷水女主播视频 | 精品久久久久久无码国产 | 无遮挡又黄又刺激又爽的视频 | 无码人妻一区二区三区精品视频 | 日本一区二区三区免费在线观看 | 精品999日本久久久影院 | 国产精品丝袜黑 | 成人欧美日韩一区二区三区 | 亚洲aⅴ天堂av在线电影猫咪 | 亚洲中文字幕无码va | 91视频下载 | 女自慰喷水免费观看www久久 | 亚洲精品中文字幕久久久久 | 午夜无码试看专区 | 午夜福利免费 | 亚洲国产精彩中文乱码av | 内射精品无码中文字幕 | 91精产国品一二三产区区别在 | 日本一区二区三区免费播放视频站 | 精品免费国产一区二区三区 | 91色视频在线观看 | 日本高清免费中文字幕 | 最新国产一级a一片免费观看 | 精品久久久久精免费 | а√天堂8资源中文在线 | 无遮挡国产高潮视频免费观 | 国产精品鲁一鲁 | 91久久国产综合 | 亚洲国产日韩在线观看18 | 91手游网1.20安卓版 | 91国内揄拍国内精品对白 | 国产欧洲黄色一级片视频 | 国产精品原创av | 国产av巨作情欲放纵无码 | 日本熟妇 | 国产无码在线观看免费在 | 三上悠亚久久精品 | 国产精品毛片免费在线看片 | 99久久精品无码一区二区毛片 | 亚洲熟妇自偷自拍另类图片站 | 日本成人电影中文字幕 | 国产精品va在线观看无码 | 国产亚洲精品午夜福 | 狠狠色综合激情丁香五月 | 不卡一区二区三区 | 亚洲一线精品精品在线观看 | 亚洲午夜精品aaa级久久久久 | 色综合久久久久久久久久 | 三级片国产| 国产视频精品免费视频 | 国产人久久人人人人爽 | 日韩电影免费在线观看视频 | 福利影院| 亚洲国产av一区二区三区四区 | 国产一区二区三精品久久久无广告 | 日本爽快片18禁片免费久久 | 中文午夜乱理片无码aⅴ | 亚洲国产精品在线观看 | 国产午夜成人久久无码一区二区 | 99re国产精品视频首页 | 国偷自产av一区二区三区接 | 亚洲欧美精品中字久久99 | 亚洲av色香蕉一区二区三区 | 国产乱码久久精品无码专区免费 | 国产精品无码mv在线观看 | 国产激情| 亚洲午夜囯产精品中文字 | 国产理论在线 | 中文字幕无码乱人伦 | 亚洲欧美日本国产一区二区三区 | 日本无遮挡真人祼交视频 | avtt香蕉久久 | 国产美女爽到喷出水来视频 | 欧美熟妇av欧差aa片 | 国产高清无码久久 | 国产美女免费观看 | 爆乳邻居肉欲中文字幕 | 精品国产群3p在线观看 | 国产av永久福利资源网站 | 波多野结衣av高清一区二区三区 | 亚洲成a∧人片在线观看无码 | 国产三级精品三级在线专 | 亚洲国产成人久久综合一 | 欧美jizzhd精品欧美 | 日本香蕉一区二区在线观看 | 欧美少妇国产影视 | 成人午夜性a一级毛片免费看 | 中文字幕乱码永久免费 | 亚洲精品亚洲人成 | 丰满熟女一区二区 | 人妻久久精品天天中文字幕 | 少妇无码av无码专区在线观看 | 亚洲精品久久久久久一区二区 | 无码一区二区三区av免费 | 欧美午夜理伦三级在线观看 | 日本高清免费中文字幕 | 久久99国产精一区二区三区 | 国产亚洲欧美在线观看三区 | 精品国产欧美一区二区三区不卡 | 在线人成视频播放午夜福利 | 国产公开免费人成视频 | 亚洲中文字幕第30页 | 欧美日韩变态另类在线观看 | 色视频免费网 | 精品久久久久久久久午夜福利 | 亚洲日韩欧洲无码v夜夜摸 亚洲日韩手机在线专区 | 看全色黄大色黄女片18 | 色欲久久久中文字幕综合网 | 亚洲av成人精品日韩在线播放 | 成人性生交大片 | 无码高潮爽到爆 | 精品国产综合区久久久久久 | 欧美精品一区二区三区不卡网 | 亚洲专区av第1页在线 | 亚洲国产天堂久久综合网站 | 国产av | 国产高清黄网站全免费 | 日韩av一区二区免费看 | 婷婷色香五月综合激激情 | 日韩欧美三区 | 变态另类天堂无码专区 | 国产成人无码区在线观看資源免費看 | 欧洲吸奶大片在线看 | 国产精品a成v人在线播放 | 中文字幕无码精品三级在线电影 | 中文字幕在线观看 | 日韩在线免 | 国产成人a人亚洲精品无码 国产成人a视频高清在线观看 | 国产亚洲制服免视频 | 在线观看免费a片视频 | 国产亚洲精品a等一页 | 99在线观看视频免费精品9 | 国产高清色诱视频在线播放 | 97久久偷偷做嫩草影院免费看 | 国产丰满大乳奶水在线视频 | 91在线永久入口 | 亚洲欧美日韩变态另类 | 国产一区二区三区水蜜桃 | 国产国模私拍在线观看 | 91在线一区二区 | 99热这里只有精品 | 怡红院日本一道日本久久 | 成人免费在线观看午夜福利 | 中文字幕乱人伦视频在线 | 黄瓜视频在线观看 | 国产成人久久精品毛片 | 韩国精品无码一区 | 国产福利在线观看麻豆 | 色综合天天综合网国产人 | 精品亚洲欧美高清 | 亚洲av成人精品网站在线播放 | av男人的天堂在线观看第三 | 国产成人精品免费播放视频 | 亚洲国产精品成人无码区 | 国产免费午夜福利片在线观看 | 亚洲毛片在线 | 蝌蚪3p| 动漫精品3d在线观看 | 国产一区二区三区在线观看91 | 国产精品秘入口久久熟女 | 亚洲国产精品一区二区第四页 | 人妻中文字幕在线 | 香蕉久久aⅴ一区二区三区 香蕉久久av一区二区三区 | 国产成人高清在线资源 | 亚洲午夜精品无码专区在线播放 | 国产综合色视频久久久 | 日韩精品亚 | 人人人澡人人人妻人人人爽 | 99久久国产综合 | 国产精品亚洲欧美—级久久精品 | 中文字幕亚洲欧美日韩专区 | 国产精品亚洲欧美在线播放 | 99国产欧美久久久精品蜜桃 | 综合国产精品私拍国产在线 | 女性自慰网站免费观看www | 国内精品久久 | 亚洲国产av美女网站 | 黄视亚洲欧洲日韩频在线观看 | 在线观看成本人 | 少妇无码av无码专区在线观看 | 欧美孕妇乳喷奶水在线观 | 熟妇人妻系列aⅴ无码专区友 | 欧美一区二区三区在线观看 | 韩国无码一区二区三区在线观看 | 日韩爱爱一| 国产人成高清视频在线观看免费 | 精品无码国产不卡在线观看 | 亚洲精品无码久久久 | 亚洲av高清在线一区二区三区 | 999国产影院精品影院 | 精品欧美成人高清在线观看观看视频 | 亚洲国产精品高清在线第1页 | 亚洲国产日韩欧美一区二区三区一 | 国产乱人伦偷精品视频色欲 | 中文字幕亚洲综合久久2025 | 人妻无码中文字幕免费视频蜜 | 亚洲欧美国产日韩精品在线 | 亚洲精品电影网 | 丝兔女郎m开腿sm调教室 | 精品人妻一区二区三区四在线 | 91老司机深夜福利精品视频在线 | 亚洲综合自拍 | 色综合天天综合网天 | 国产精品爽爽ⅴa在线观看 国产精品爽爽v | 高清性色生活片试看 | 国产真实强奷网站在线播放 | 中文字幕av影视精品不卡 | 精品久久久久成人码免费动漫 | 亚洲va国产va欧美 | 亚洲国产精品无码久久98蜜桃 | 91精品福利在线 | 神马午夜福利视频 | 国产小视频在线观看 | 国产免费av片在线观看丈 | 中文字幕人妻伦伦 | 国产欧美日韩 | 亚洲精品视频久久 | 丰满人妻跪趴 | 欧美人与动性行 | 欧美日韩国产综合视频一区二区三区 | 欧美内射深| 99不卡无码中文字幕在线 | 亚洲免费福利精品日韩视频 | 内射人妻无码色av天堂 | 中文字幕热久久久久久久 | 午夜精品久久久久蜜桃 | 高潮未删减手机高清在线观看 | 午夜无遮挡男女啪啪免费软件 | 亚洲国产av一区二区三区 | 精品国产午夜福利在线观看 | 亚洲视频专区 | 999国产视频网 | 亚洲国产精品自在自线观看 | 成人性生交大片免费看国外 | 99re热这里只有精品 | 人人干操| 91亚洲欧美综合高清在线 | 色综合久久九月 | 国产性色av | av免费久久洗澡 | 亚洲视频中文字幕在线观看 | 日本一区二区三区中文字幕 | 3d动漫精品啪啪一 | 91精品国产高清久久久久久99 | 国产成人a∨大片在线 | 高清无码在线观看了a | 专区中文字幕视频专区 | 日韩电影大片手机在线观看 | 九一香蕉视频 | 天天干天天操天天摸 | 日本永久精品视频在线观看 | 精品无码国产社区野花在线观 | аv天堂手机版在线观看 | 无码a级毛片在线观 | 欧美日韩一区 | 国产成人精品一区二区三区无码 | 91精品国产福利在 | 欧美剧大全高清全集免费在线观看 | 国产亚洲精品福利视频在线观看 | 在线观看免费播放av片 | 精品国产91高清在线观看 | 羞羞麻豆国产精品1区2区3区 | 三级韩国三级日产三级 | 日本丰满熟妇xxxxxhd | 香蕉久久av一区二区三区 | 99久久国产热无码精品免费久久久久 | 久久99精品国产麻豆不卡 | 亚洲熟妇无码八av在线播放 | 无码国产激情在线观看 | 成全视频在线观看在线 | 亚洲熟女综合一区二区三区 | 日本a片把舌头伸进 | 丰满多水的寡妇毛片免费看 | 日本h纯肉无遮掩3d动漫在线观 | 果冻传媒在线观看九一制片厂 | 国产熟女3p贵在真实视频 | 国产一区二区三区水蜜桃 | 亚洲第一永久色 | 国产精品无码不卡午夜 | 婷婷久久综合中文久久蜜桃av | 国产午夜无码精品免费看动漫 | 亚洲国产图片综合 | 伊人影视网 | 亚洲精品国产专区91在线 | 人妻无码aⅴ不卡 | 国产suv精品一区二区 | 日韩一区二区三区高清电影 | 国产精品午夜一区二区 | 成年人高级 | 性欧美vr高清 | 午夜精品国产电影在线观看 | 91国偷自产一区二区三区蜜臀 | 国产又粗 | 99视频精品免费专区 | 国产精品亚洲a∨天堂不卡 国产精品亚洲av高清二区 | 欧美精品久久一区二区三区 | 亚洲不卡无码www一区二区三区 | 成人性生交大片免费看r男欢女爱 | 丰满人妻熟妇乱又伦精品软件 | 欧洲亜洲中文日韩色图 | 国产精品不卡a∨在线 | 天天爱天天干天天操 | 国产在线高清理伦片a | 91视频播放 | 在线a级毛 | 国产在线视频 | 亚洲国产综合一区 | 97色伦图片97综合影院 | 69日本精品成人无码视频 | 国产在线观看精品 | 91po国产在线精品免费观看 | 欧美亚洲日韩一区二区 | 性做久久久久久久久不卡 | 一区二区三区精品视频日韩 | 91麻豆精品国产自产在线观看 | 动漫精品一区二区三区 | 一区二区视频 | 国产原创中文在线亚瑟 | 日韩毛片无码永久免费看 | 亚洲国产成人99精品激情在线 | 亚洲成色www久久网站 | 国产清纯91天堂在线观看 | 无码欧精品亚洲日韩一区 | 亚洲无码精品在线播放 | 国产日韩综合一区二区性色av | 激情五月亚洲综合中文专区 | av在线天堂 | 成年黄页网站 | 精品人妻无码一区二区蜜桃 | 国产伦精品一区二区三区免.费 | 国产99这里| 午夜电影院理论片8888琪 | 国产激情视频在线观看免费播放 | 成人免费在线观看午夜福利 | 人体内射精一区二区三区 | 91久久精品国产亚洲 | 99国产在线| 欧美精品在线免费观看 | 午夜不卡老 | 91久久99久91天天拍拍 | 毛茸茸性xxxx毛茸茸毛茸茸 | 精品欧美国产一区 | 午夜精品久久久久久99热 | 91蜜成人网站 | 日韩av无码专区免费 | 中文字幕久久人妻无码人妻出 | 日韩午夜高清福利片在线观看 | 亚洲精品无码久久久久不卡 | 国产成人精品综合久久久免费观看 | 精品一区二区三区在线成人 |