超碰91资源站-超碰97豆花-超碰97人妻-超碰97人人干-超碰97人人香蕉-超碰97天天操-超碰97在线资源站-超碰97资源站共享-超碰97资源站总站-超碰aa在线91-超碰av操-超碰爱爱

半岛外围网上直营

Qt網(wǎng)格組件DataGrid:如何在網(wǎng)格中輸入新行

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

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

# 界面/圖表報(bào)表/文檔/IDE等千款熱門(mén)軟控件火熱銷(xiāo)售中 >>

QtitanDataGrid是一款適用于Qt的商業(yè)化DataGrid 組件,它使得表格數(shù)據(jù)可以直接面向終端用戶(hù)。這個(gè)組件吸收了用戶(hù)界面結(jié)構(gòu)顯示表格方面所有的現(xiàn)代化技術(shù)的精華,是目前Qt市場(chǎng)上唯一一款擁有如此高級(jí)功能和出色性能的網(wǎng)格組件。這個(gè)Qt數(shù)據(jù)網(wǎng)格組件使用純C++創(chuàng)建,運(yùn)行速度極快,處理大數(shù)據(jù)和超大數(shù)據(jù)集的效果突出。QtitanDataGrid完全集成了QtDesigner,因而極易適應(yīng)其他相似的開(kāi)發(fā)環(huán)境,保證100%兼容Qt GUI。

點(diǎn)擊下載QtitanDataGrid最新試用版

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

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


代碼如下:

.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

點(diǎn)擊獲取更多文章教程!現(xiàn)在立刻下載Qt免費(fèi)試用吧!更多Qt類(lèi)開(kāi)發(fā)工具QtitanRibbonQtitanChartQtitanNavigationQtitanDockingQtitanDataGrid在線(xiàn)訂購(gòu)現(xiàn)直降1000元,歡迎咨詢(xún)慧都獲取更多優(yōu)惠>>

工具推薦:

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

標(biāo)簽:

本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@ke049m.cn

文章轉(zhuǎn)載自:

為你推薦

掃碼咨詢(xún)


添加微信 立即咨詢(xún)

電話(huà)咨詢(xún)

客服熱線(xiàn)
023-68661681

TOP
利記足球官網(wǎng)(官方)網(wǎng)站/網(wǎng)頁(yè)版登錄入口/手機(jī)版登錄入口-最新版(已更新) 真人boyu·博魚(yú)滾球網(wǎng)(官方)網(wǎng)站/網(wǎng)頁(yè)版登錄入口/手機(jī)版登錄入口-最新版(已更新) 最大網(wǎng)上PM娛樂(lè)城盤(pán)口(官方)網(wǎng)站/網(wǎng)頁(yè)版登錄入口/手機(jī)版登錄入口-最新版(已更新) 正規(guī)雷火競(jìng)技官方買(mǎi)球(官方)網(wǎng)站/網(wǎng)頁(yè)版登錄入口/手機(jī)版登錄入口-最新版(已更新) 雷火競(jìng)技權(quán)威十大網(wǎng)(官方)網(wǎng)站/網(wǎng)頁(yè)版登錄入口/手機(jī)版登錄入口-最新版(已更新) boyu·博魚(yú)信譽(yù)足球官網(wǎng)(官方)網(wǎng)站/網(wǎng)頁(yè)版登錄入口/手機(jī)版登錄入口-最新版(已更新) 權(quán)威188BET足球網(wǎng)(官方)網(wǎng)站/網(wǎng)頁(yè)版登錄入口/手機(jī)版登錄入口-最新版(已更新) 正規(guī)188BET足球大全(官方)網(wǎng)站/網(wǎng)頁(yè)版登錄入口/手機(jī)版登錄入口-最新版(已更新) 国产成人狂喷潮在线观看2345 | 成人毛片十八女人毛片 | 国产成年女人免费视频播放a | 国产精品一区二区手机在线观看 | 国产高清一区二区三区免费视频 | 国产欧美va | 国产a久久精品一区二 | 国产精品va在线观看无码 | 2025中文字幕在线无码视频 | 加勒比在线精品视频 | 国产一区二区在线观看免费 | 国产欧美另类在线视频 | 国产高级桑拿在线播放 | 91成人国产网站在线观看 | 高清无码不卡视频 | 国产精品亚洲专区无码电影 | 91高清视频| 国产亚洲日韩中文字幕欧美视频 | 国产丝袜一区二区在线播放 | 精品丝袜人妻久久久久久 | 国产精品亚洲欧美日韩区 | 国产精品国产三级毛片在线专区 | 国产午夜人成在线视频 | a级孕妇高清免费毛片 | 国产欧美日韩综合 | 精品国产91高清在线观看 | 国产91模特无码 | 国产极品粉嫩在线观看的软件 | 精品国产熟妇aⅴ一区二区 精品国产熟女成人av | 国产成人拍精品视频网 | 国产美女白嫩嫩在线观看 | 国产福利小视频 | 国产中文字幕在线久 | 精品无码国产一区二区日本 | 成人无码精品 | av色欲无码人妻中 | 国产自啪偷啪成人va | 国产亚洲一区二区手机在线观看 | 国产一区视频在线免费观看 | 国产在线拍揄拍自揄拍无码资源 | 高潮流白浆潮喷在线播放视频 | 国产精品内射 | 国产成人a福利在线观看 | 国产日韩av有码 | 国产91长腿美女在线观看 | 国产成人精品电影在线观看 | 国产欧美日韩另类va在线 | 精品香蕉久久久午夜福利 | 国产综合亚洲欧美另类久久久精品 | 国产成人午夜视频影院免费观看 | 国产裸拍裸体视频 | 国产精品成人va在线观看入口 | 极品国产一区二区三区 | 18禁成人黄网站免费观看 | 成人午夜高潮免费视频试看 | 国产精品成av人在线观看片 | 国产丝袜视频一区二区三区 | 国产成人无码亚洲a片小苹果 | 国产97在线观看 | 精品秘一区二三区免费雷安 | 国产做a爱片久久毛片a片 | 国产在线视频福利 | 国产精品一区二区三区免 | 国产末成年女噜噜片 | 国产黑色丝袜视频在线观看网红 | 国产精品国产三级国产av主播 | 国产精品亚洲一区在现观看 | 国产成a人亚洲精v品无码樱花 | 国产99久9在线视频 国产99久9在线视频传媒 | 韩国精品久久久久久无码 | 2025国产成人精品视频人 | 91黄视频| 国产无码视频一区二区三区 | 福利视频一区二区三区四区 | 国产激情一区二区三区成人 | 国产一区免费在线观看 | 国产精品亚洲第一区在线观 | 国产一区二区三区成人久久片 | 国产熟睡乱子伦视频观看看 | 国产精品精品一级v片免费 国产精品精品在线看 | 成年女人毛片免费视频播放器 | 国产娇喘喷水呻吟在线观看 | 精品人妻系列无码专区 | 国产欧美日韩欧美特级 | 国产欧美精品123区发布 | 国产裸体歌舞一区二区视频 | 成人a动漫区| 国产欧美v欧美v在观看 | 国产成年人免费观看91视频 | 91福利在线精品国产 | 国产精品无码一区二区在线 | 国产亚洲日韩网曝欧美11 | a级毛片在线免费看 | 国产高清av在线播放 | 国产黑丝视频在线观看 | 国产精品午夜一区二区欲梦 | 国产中文字幕精品一区二区三区 | 国产成人综合亚洲av第一页 | 国产成人av在线播放不卡影院 | 国产成人久久综合一区77 | 成人精品国产一区二区三区 | 成人做爰www免费看视频韩国 | 国产麻豆精品乱码一区 | 国产熟女一区二区三区五月婷 | 国产激情一区二区三区成人 | 18禁裸乳无遮挡啪啪无码免费 | 国产v片在线播放免费观看大全 | 国产黑丝精品在线 | 国产三级级在线观看大学生 | 国产成人午夜福利在线播放 | 国产成人av一区二区三区不卡 | 国产精品一区二区18 | 韩国免费a级作爱片无码 | 国产一区二区在线观看动漫 | 99精品视频九九精品视频 | 91精品国产一区自在线拍 | 国产成人久久精品区一区二区 | 18禁无遮挡啪啪摇乳动态图 | 91精品国产91 | 国产av国产精品白丝jk制服 | 国产白丝jk被疯狂输出视频 | 国产三级精品在线 | 国产欧美日韩视频一区二区三区 | 成人午夜在线观看国产 | 国产成人三级视频在 | 国产精品成人av电影不卡 | 成人国产一区二区三区精品不 | 国产精品户露av在线户外直播 | 国产a毛片高清视 | 国产三级在线播放免费 | 国产成人免费软件 | 91亚洲欧美一区二区三区 | heyzo无码国产精品蜜臀av | 91麻豆精品欧美视频 | 国精品日韩欧美一区二区三区 | 99精品亚洲一区二区三区 | 国产精品无码中出在线播出 | 国产一区二区av免费 | 成人欧美精品视频在线观看 | 国产丝袜在线视频 | av免费一级二级 | 国产福利免费的网址 | 91日本在线中文字幕 | 国产精品一区二区剧情熟女 | av在线大片不卡可观看 | 成片在线看一区二区草莓 | 国产欧美日韩中文久久 | 国偷自产一区 | 成人国内精品久久久久一区 | 国产成人av区一区二区三 | 国产一区国产二区国产三区 | 国产丝袜美腿一区二区三区 | 91精品国产手机 | 国产成人无码av | 国产精品无码在线2025 | 精品国产日韩在线人成 | 成人欧美一区二区三区黑人 | 国产精品无码制服丝袜 | 国产高清一区二区三区免费视频 | 国产亚洲无码一区二区中文 | 国产美女天天爽天天乐 | 国产午夜一区二区三区影院 | 韩国三级电影精品久久 | 国产av日韩一区 | 国产精品女人呻吟 | 国产精品久久久久久久妇丈 | 91日亚欧国产内射成人网 | 国产无码自拍高清小电影 | 国产亚洲欧美日韩在线观看不卡 | 国产黄网站视频在线观看 | 波多野结衣中文字幕一区二区 | 国产美女午夜区一区二区三区 | 成人精品午夜无码 | 国产一区二区三区日韩 | 精品精品国产国产自在线 | 精品国产丝袜久久久久久无码 | 2025nv天堂香蕉在线观看 | 99精品视频| 国产福利免费视频不卡 | www国产精品内射老熟女 | 成人亚洲a片ⅴ一区二区三区动漫 | 国产精品一级毛片无码视频 | 国产精品日韩亚洲一区二区 | 精品日韩传电影 | 国产aⅴ无码专区 | 国产极品白嫩美女在线观看看 | a级全黄试看30分钟观看 | 国产成人片一区二区三区白 | 91日韩天堂一区二区二区 | 国产精品多人p群无码 | 国产麻豆叶一涵剧情在线观 | 国产麻豆网站 | 国产欧美日韩中文字幕 | 99久久无码一区人妻 | 爆爽久久久一区二区又大又黄又嫩 | 国产美女一级a作爱在线观看 | 国产熟睡乱子伦视频观看看 | 精品婷婷色一区二区三区 | 91麻豆精品国产自产在线观看一区 | 国产aaa一区二区三区 | 国产午夜精品一 | 国产免费一区二区三区香蕉精 | 国产丝袜调情 | 精品亚洲av一区二区帮区 | 丰满人妻av无码一区二区 | 国产精品无码一区二区三区免费 | 91精品少妇高潮一区二区 | 国内盗摄视频一区二区三区 | 国产一区二区三区水蜜桃 | 国产人与动人 | 高清欧美剧正版在线观看 | 国产日韩精品在线播放 | 国产成人无码aⅴ片在线观看 | av无码小缝喷白 | 国产成本人三级在线观看网站 | 国产精品免费观看在线观看 | 国产精品成人啪精久久 | 国产精品一二三在线观看 | 国产成人精品免费 | 国产成人av三级在线观看按摩 | 高清无码在线网站 | 国产成人免费ā片在线观看 | 国产精品成人啪精品视频免费观看 | 国产主播在线观看 | 国产精品成久久久久三级6二k | 国产日韩一区二区三区在线播放 | 国产最爽视频在线观看 | 国产精品亚洲五月天 | 国产成人无精品久久久久国语 | 99久久精品免费精品国产电影 | 国产91精品高清 | 东京热av无码电影一区二区 | 国产午夜免费啪视频观看视频 | 国产成人综合在线观看 | 国产va在线观看免费 | 国产欧美久久久久久精品一区 | 91亚洲欧洲视频在 | 国产一区二区三区影院 | 18禁黄无遮挡免费网站国产 | 国产成人无码午夜视频在线观看 | 二区黄色| 国产欧美一级内射7乀 | 国产无人区一码二码三码的 | 国产边摸边吃奶边做爽视频 | 国产精品成人免费视频 | 国产丝袜美女一级二级三级 | 丰满人妻熟妇乱又仑精品 | 国产成人亚洲精品无码a大片 | av中文字幕潮喷人妻系列 | 囯产精品久久久久久久久久妞妞 | 国产爆乳无码在线观看 | 高清无码一区二区在线观看吞 | 国产午夜毛片一区二区三区 | 国产成人精品午夜在线观看 | 国产精品人妻无码久久久张津瑜 | 国产品精品无码视av | 国产麻豆精品一区二区三区 | 成人免费一区二区三区视频软件 | 国产精品人成在线播放新网站 | 91精品国产一区二区三区左线 | 国产日韩aⅴ免费无码一区二区 | 国产一区二区三区在线视频 | 国产av导航大全精品 | 国产黄网站手机在线观看 | 国产免费1区 | 国产免费午夜福利蜜芽无码 | 国产在线精品观看 | 精品麻豆丝袜高跟鞋av | 精品人妻丝袜av一区二区 | 精品一区二区高潮 | 国产三级av国片免费 | 国产最爽的aⅴ片在线观看 国产最爽的av片在线观看 | 国产成人综合亚洲欧美天堂 | 午夜精品视频在线播放 | 国产一区二区三区高清在线观看 | 国产av宗合影院 | 99久久亚洲综合精 | 韩国无码av片在线观看网站 | 国产福利电影 | 国产av原创首| 99精品国产在热久久 | 国产女主播视频观看网站 | 国产av一区二区三区日韩 | av无码久久不卡 | 国产精品免费热播 | 国产成人情侣激情小视频 | 成人无码aa精品一区 | 高潮毛片无遮挡免费高清69 | 国产91在线免费观看 | 国产91精品久久久久久 | 精品一级毛片免费无卡顿 | 国产精品三p一区二区视频 国产精品三级 | 国产最猛性xxxxxx69交 | 国产精品国语 | 国产成人综合在线观看 | 国产三级农村妇女在线 | 国产一二三四区中 | 国产精品一区99国产aaa精 | 国产一区二区三区亚洲欧美 | 国产激情视频在线观看 | 国产欧美另类精品又又久久 | 国产在线第一浮力影院 | 精品国产仑片一区二区三区 | 国产精品国内自产拍在线播放 | 国产精品一区二区久久宅男 | 精品国产亚洲av麻豆狂另类亚 | 国产欧美熟妇另类久久久 | 国产成年人未进视频 | 国产精品亚洲综合色区韩国 | 国产成人精品白浆久久69 | 国产成人无码综合亚洲日韩 | 精品人妻少妇嫩草v无码专 精品人妻少妇无码视频 | 国精品无码一区二区三区左线 | 国产福利片在线观看 | av无码小缝喷白浆在线观看 | 国模少妇无码一区二区三区 | 国产一区二区毛片视频 | 国产精品成人啪免费视频 | 国产一区二区高清视频 | 国产aaaaa一级毛片 | 国产熟睡乱子伦午夜视频网 | 国产在线一区 | 国产精品中文字幕免费观看 | 国产精品一区二区日韩av在线 | 国产在线一二三四区 | 国产精品日韩欧美一区2区3区 | 国产精品一区二区麻豆亚洲 | 国产福利视频一区二区 | 国产区精品一区二区不卡中文 | 国产麻豆精品入口在线观看 | 国产aⅴ一区 | 国产微拍精品一区在线观看 | 国产精品欧美视频另类专区 | 精品久久人妻av中文 | 精品国产一区二区三区蜜桃 | 精品日韩欧美一区在线播放不 | 国产精品成人在线 | 国外欧美一区另类中文字幕 | 国产精品三级不卡电影 | 成人区精品一区二区婷婷 | 91久久精品无码一区二区 | 国产高清在线精品一区免费97 | 国产不卡在线 | 国产成人精品无缓存在线播放 | heyzo中文字幕 | 91精品云霸高清中文字幕 | 国产精品无码久久久最线观看 | 国产福利91精品一区二区三区 | 国产精品一区日韩欧美 | 国产成本人片无码免费 | 国产精品原创永久在线 | 国产无码在线免费 | 成人国内精品 | 国产精品一区二区免费 | 国产人妻精品午夜福 | 国产极品美女高潮无套app | 国产一区二区激情戏 | 国产午夜福利片在线观看尤物 | 国产野模私拍视频一区二区 | 国产成人欧美一区二区三区的 | 精品国产v无码大片在线看 精品国产v无码免费看扒衣 | 91露脸熟女四川熟女在线观看 | 国产精品夜夜春夜夜爽久久 | 91精品一区国产高清在线 | a视频在线观看无码 | 成人国内精品久久久久一区 | 波多野结衣一区二区三区在线观看 | 91亚洲欧美一区二区三区 | 国产高清精品入口麻豆 | 超级香蕉97视频在线观看一区 | 成人无码v在线播放 | 国产三级毛片 | a级毛片视频国产精品视频 a级毛片视频免费播放 | 国产二区无码 | 国产精品伊人 | 91麻豆精品国产自产在线观 | 国产三级在线免费 | 成人免费区一区二区三区 | 调教女m视频免费区视频在线 | 成人涩涩视频免费观看 | 成人精品久久中文字幕 | 国产午夜福利一区在线观看 | av无码国产在线观看岛国 | 国产一精品一av一免费爽爽 | 国产二级一片内射视频插放 | 国内女子自慰喷潮a片免费观看 | 国产成人av在线网 | 91久久国产成人免费网站 | 国产4p露脸在线观看 | 国产福利精品一区 | 国产三级一区二区 | 国产精品国产三级国产三级 | 97人妻一区二区精品免费 | 国产巨大爆乳在线观看 | 成在线人永久免费视频播放 | 国产黄色视频 | 国产精品成人有码在线观看 | 国产+精品+无码视频 | 成人免费高清二区三区视频不卡 | 国产三级片在线91 | a级毛片无码兔费真人久久 a级毛片无码兔费真人久久91 | av无码中文一区二区三区四区 | 国产毛片久久久久久国产毛片 | 国产成人午夜福利小久久久 | 国产亚洲第一午夜福利合集 | 国产成人午夜福利高清在线观看 | 国产骚丝袜诱惑 | 国产午夜精品久久 | 国产成人久久精品区一区二区 | 国产艳妇av在线出轨 | 精品国产免费看久久精品 | 成人自拍乱拍在线视频 | 国产人妖高清一区二区 | 国产精品亚洲mnbav网站 | 国产无码久久99 | 精品人妻一区2区三区 | 国产日韩欧美精品先锋 | 成人午夜福利视频镇东影视 | 91蜜桃视 | 国产成年无码久久久久毛片 | 国产主播在线观看第一页 | 精品久久久久久久无码 | 91精品福利 | 国产尤物一区在线不卡 | 国产原创在线观看播放 | 国产原创精品国产专区 | 精品无码在线观看 | 国产成人精品无码一区二区 | 国产一区二区成人久久919色 | 国产免费真实喷潮视频 | 国产精品青草国产一区二区 | 国产无码不卡在线观看 | 丰满熟妞区| 国产成人啪精品视频免费软件 | 国产午夜在线观看 | heyzo亚洲精品日韩 | 东京天堂国产一区二区三区 | 国产av无码专区亚洲av | 99久久国产精品免费热日韩 | 东京热中文字幕a专区 | 99久久亚洲精品日 | 国产成人调教在线视频 | 2025国产三级 | 国产美女性爱亚 | 精品国产免费人成电影在线看 | 国产精品午夜高清在线观看 | 国产91最新欧美在线观看 | 国产成人精品一区二区免费 | 国产内射一级一片内射精品视频 | 国产精品成人一区二区 | 国产成人大片大片在线播放 | 18禁裸乳无遮挡啪 | 国产在线欧美日韩精品一区 | 国产成人精品免费视频大全 | 国产熟女一区二区三区十视频 | 妇女毛片精品久久 | 成人欧美s视频 | 国产午夜无码片在线观看影院 | 18禁裸乳无遮挡啪啪无码免费 | 国产成人精品a∨一区二区 国产成人精品aaa | 国产成人av无码片在线观看 | 国产精品无码dvd在线观看 | 国产成人综合久久精品最新 | 精品视频一区二区三区四区五区 | 国产精品三级一区二区三区 | av无码一区二区三区波多野 | 国产裸体美女永久免费无遮挡 | 国产成人在线观看免费网站 | 国产成年无码aⅴ片在线观看 | 国产精品毛片久 | 国产麻豆文化传媒 | 国产三级高清午夜羞羞视频 | 国产a级a片一天天看 | 国产成人精品三区 | 18禁男女爽爽爽午夜 | 91麻豆天美传媒在线 | 国产一区二区三区精品在线观看 | 国产av日韩一区二区三区精品 | 国产精品va无码一区二区 | 国产午夜高清高清在线观看 | 国产av无码乱码国产精品 | 国产成人久久精品二三区无码 | 国产亚洲欧美一区二区三区在 | 国色天香卡一卡2卡3卡4卡5 | av鲁丝一区鲁丝二区 | 国产高清成免费视频 | 精品国产v无码大片在线看 精品国产v无码免费看扒衣 | 国产综合自拍 | 成在人线av无码高潮喷水 | 国产精品毛片aⅴ一区二区三区 | 91人妻中文字幕在线精品 | 国产精品白嫩美女 | 91视频免 | 国产原创一区在线 | 国产午夜av免费在线观看 | 成人免费无码大片a | 国产精品一级毛片在线观看 | 国内精品久久无码人妻影院 | 国产猛烈高潮 | 国产爆乳无码视频在 | 国产做无码视频在线 | 国产精品麻豆专区 | 国产高清成人久久 | 国产盗摄91精品一区二区三区 | 2025国产精品视频网站 | 按摩人妻中文字幕 | 欧美一区二区三区四区 | 国产成人精彩在线 | 国产成人精品久久亚洲高清 | 国产一区二区av写真福利 | 白嫩少妇丰满一区二区 | 国产无码在线视频高清无删减 | 囯产目拍亚洲精品小草 | 国产av无码字幕制服高清 | 国产一区二区精品久久 | 99亚洲国产精品色一区二区三 | 国产真人无码作爱免费视频 | 高清无码在线观看h片 | 国产美臀激情在线播放 | 99九九成人免费视频精品 | 国产a级毛片大全 | 国产麻豆精品免费密入 | 国产成人无码āā精品一区 | 国产成人精品亚洲一区二区三区 | 91高清国产 | 成年女人视频网站免费m | 福利姬国产精品一区在线 | 国产传媒一区二区三区四区五区 | 岛国无码av潮喷 | 精品国产sm捆绑最大网免费站 | 成人av片无码免费天天看 | 国模无码一区二区三区 | 精品人妻av中文字幕乱 | 国产原创大胆私拍视频 | 国产午夜无码专区喷水 | 国产午夜人免费视频成69 | 国产女人喷潮在线观看视频 | 精品国产日韩亚洲一区二区 | 国产女同女互慰流白浆视频 | 91久久久久精品 | 国产91精品一区麻豆亚洲 | 国产尤物精 | 韩国日本国产无套白浆一区二区 | 国产+人人+视频 | 国产精品无码久久av | 福利二区三区第1页 | 91久久国产最好的精华液 | 国产不卡视频一区二区三区 | 精品亚洲区三区二区一 | 99久久精品久久久久久清纯 | 精品国产三级在线观看 | 国产日韩ar无码免费一区二区 | 97无码人妻| 国产精品三级在线观看无码 | 国产精品亚洲片精品 | 精品人妻大屁股白浆无码p 精品人妻大屁股白浆无码久久 | 岛国无码av不卡一区二区 | 国产无套内射又大又 | 韩国精品久久久久久无码 | 国产在线精品无码二区二区 | 国产成人无码精品a级毛片抽搐 | 国产女同女互慰流白浆视频 | 国产在线不卡国产高清 | 91精品综合久久久久久五月天 | 国产精品一区在线免费观看 | av无码一区二区 | 国内偷自第一区二区三区 | 国产免费无码v片在线观看不卡 | 2025无码国产| 国产精品毛片久久久久久久 | 绯色国产av无码一区二区 | av亚欧洲日产国码无码 | 国产三级久久久精 | 国产一级片射在线观看 | 91麻豆精品国产一区色欲噜噜噜 | 国产一区视频一区欧美 | 国产爆初菊一区视频 | 国产成人麻豆精品午夜福利在 | 高h猛烈失禁潮喷 | 精品无码人妻一区二区三区不卡 | 91无码人区精品一区二区三区 | 国产精品一区二区日韩91 | 国产精品无码久久av嫩草 | 91麻豆国产精品91久久久 | 国产福利精品一区二区无码 | 福利一区二区三区微拍视频 | 韩国无码一区二区三区免费视频 | 丰满人妻熟妇乱又伦精品 | 91在线无码精品秘入口九色 | 成人午夜精品亚洲日韩 | 精品无码视频一区二区三区 | 精品午夜国产人人福利一区 | 国产一二三区四区20 | 国产成人综合高清在线观看 | 国产成人无码综合亚洲日韩色欲 | 国产av成人一区二区三区 | 精品熟人妻一区二区三区四区 | 国产亚洲欧美一区二区三区在线播放 | 国产成人精品三级麻豆 | 国产精品午夜视频 | 国产精品高清一区二区人妖 | 精品国产一级精品毛片基地 | 91麻豆精品在线观看 | 国产黄色一级大片 | 国产成人美女在线播放 | 国产精品一国产精 | 国产毛片在线看线看 | 国产精品动漫在线网站 | 国产一区美女 | 911国产在线观看无码专区 | 国产女人爽的流水毛片 | 成人无码精品1区2区3区免费看 | 3d性欧美动漫精品xxxx | 国产av国片精品麻豆 | 国产99久久久国产精品潘金莲 | 国产精品亚洲二区在线 | 18禁黄网导航 | 国产精品丝袜自慰在线观看 | 国产三级精品久久久久久久 | 国产成人深夜福利短视频99 | 国产丝袜精品 | 果冻国产传媒61国产免费 | 91极品女神私人尤物在线播放 | 国产成人啪精品视频免费网站 | 国产精品日韩欧美一区二区视频 | 国产亚洲日韩第一页av | 国产日韩一区在线精品 | 97无码精品人妻一区二区老司机 | 国产一区二区三区精品网站免费 | 爆乳熟妇一区二区三区 | 国产微拍精品一区二区 | 国产一级毛片潘金莲的奶头 | 国产成人免费a在线视频 | 国产美女被遭强高 | 国产在线精品一区二区高清不 | 国产极品白嫩精品无码视频 | 国产精品色哟哟视频网 | 国产91精品一区麻豆亚洲 | 精品无码一区二区三区视在线 | av免费网址在线看 | 精品人妻无码一区二区三区99 | 18禁动漫一区二区三区免费下 | 国产午夜福利精品偷伦91 | 成人午夜电影免费完整在线看 | 精品偷拍一区二区三区 | 国产欧美日韩一级视频在线观看 | 成人国产精品日本在线观看 | 精品国产一区二区三区无码蜜桃 | 丰满人妻跪趴高撅肥臀 | av一区二区无码不卡 | 国产中文字幕电影 | 国产成人欧美一区二区三区不卡 | 91久久国产口精品久久久久 | av三级在线观看免费天堂 | 精品麻豆剧传媒av国产 | 精品国产你懂的在线 | 91大神亚洲影视在线 | 91在线视频| 91精品高清国产欧美日韩 | 国产成人av在线亚洲天堂在线观看 | 国产真实乱人视频在线看 | 1000部啪啪未满十八勿入 | 国产精品成人a片在线播放 国产精品成人a区在线观看 | 91精品久久久久亚洲国产 | 国产欧美另类久久精品蜜芽 | 成人午夜福利视频后入 | 91老司机深夜福利精品视 | 国产一区亚洲一区 | 国产欧美日韩一级片免费看 | 国产精品欧美一区二区在线看 | 丰满人妻少妇久久久久 | 国产美女免费牲交视频 | 国模一区二区 | 国产在线视频一区二区高清乱码99 | 国产aⅴ无码精品一区二区 国产aⅴ无码精品一区二区三区 | 成人午夜无码国产 | 高清国产网曝门事 | 国产在线精品成人欧美 | 99久久精品一区二区毛片 | 91麻豆产精品久久久久久夏晴子 | 国产熟女露脸大叫高潮 | 国产女主播资源一区二区网站 | 丰满五十 | 国模无码一区二区三区 | 国产91综合久久 | 国产成人精品久久久久 | 2025国产综合在线入口 | 2025精品国产自在现线官网 | 2025久久精品国产99国产精品 | 国产自产视频一区二区三区 | 91人妻无码精品一区二区毛片 | 91精品国产自产在线啪免费 | 91精品国产肉丝高跟在线观 | 精品人妻少妇av一区二区三区 | 国产麻豆剧果冻传媒浮生影视 | 国产午夜成人免费看片无遮挡 | av站天堂资 | 国产亚洲精aa在线观看香蕉 | 高清无码v视频日本www | av麻豆级在线播放 | av天堂午夜精品一区 | 国产免费无码一区二区视频 | 91亚洲自偷手机在线 | 国产一区二区三区亚洲 | a级国产乱理片 | 国产精品爽爽久久久久久蜜臀 | 3d动漫精品啪啪一区二区中文 | 国产精品国产三级国产aⅴ9色 | 国产精品国产成人国产三级 | 精品无人区乱码1区2区3区在线 | 国产日韩aⅴ免费无码一区二区 | 国产av剧情md精品麻豆 | 国产麻豆日韩欧美久 | 精品国产a∨无码一区二区三 | 国产成人av综| 激情啪啪精品一区二区 | 97无码免费 | 国产三级短视频在线观看 | 按摩师舌头进去添的我好舒服 | 国产精品亚洲欧美—级久久精品 | 成人精品午夜无码免费 | 国产在线97公开视频 | 国产精品白浆无码流出免费看 | 国产精品无码在线播放 | 国产综合成人观看在线 | 成a人无码午夜电影 | 国产精品观看视频免费完整版 | 丰满人妻少妇久久久久 | 国产成人a在线观看视频 | 国产精品一区二区动漫av | 国产艳妇av在线 | 国产福利免费视频 | 国产蜜臀一区 | 国产欧美日韩在线一区二区不卡 | 国产va免费精品高清在线 | 国产精品毛片v一区二区三区 | 国产无套无码aⅴ在线观看 国产无套在线播放 | 国产成人一区二区三区电影 | 丰满老熟妇好大bbbbb仙踪林 | 精品三级在线 | 国产蜜臀视频在线观看 | av在线天堂 | 国产精品人妻无码一 | 国产精品无码久久久久免费av | 国产亚洲中文日本不卡二区 | 国产亚洲欧洲aⅴ综合一区 国产亚洲欧洲国产综合一区 | 国产毛片精品av一区二区 | 国产精品黑色丝袜高跟鞋 | 国产一区欧美日韩 | 国产成人精品一区二三区视频 | 91精品国产免费久久久久久 | av一区二区三区不卡在线 | 成人国产精品一区二区网站 | 国产无码资源在线观看 | 精品国产区一区二区三区在线观看 | 国产极品美女高潮无套在线 | 绯色国产av无码一区二区 | 国产亚洲欧美日韩久久图片 | 精品日韩欧美一区二区三区在线播放 | a级毛片在线免费 | 成年女人大片免费播放完整 | 99久久精品视频 | 国产成年无码aⅴ片在线观看 | 国产蜜桃一区二区三区在线观看 | 国产成人无码a区在线观看导航 | 国产精品一区波多野结衣 | 成人亚洲国产精品无码久久一线 | av无码小缝喷白浆在线观看 | 91精品国产麻豆福利在线电影 | 丰满的瑜伽老师bd三级 | 国产午夜精品福 | 国产日韩无码中文字幕在线综合 | av尤物免费在 | 国产午夜鲁丝片av无码 | 丰满少妇大力进入 | 国产欧美日韩综合在线一区二区 | 国产成人精品无码免费播放 | 成人h动漫精品一区二区无码 | 国产精品欧美一区麻豆系列 | 成人a毛片 | 国产成人无码a区在线播放 国产成人无码a区在线观9 | 18禁裸乳无遮挡免费观看 | 国产精品久久久久久久久久日本 | 变态sm天堂无码专区 | 成人家庭影院日韩午夜 | 国产主播一区二区 | 91探花在线观看 | av无码一区二区大桥未久 | 激情欧美经典日韩 | 69精品无码一区二区 | 国产欧美视频在线观看 | av无码精品久久久久精品免费 | 国产激情视频一区二区三区 | 国产成a人亚洲精v品 | 国产91对白在线观看 | 国产精品无码专区在线观看 | 国产精品白丝av网站在线观看 | 国产成人无码av一区二区在 | 国产成人精品久久一区二区 |