欧美日韩亚-欧美日韩亚州在线-欧美日韩亚洲-欧美日韩亚洲第一区-欧美日韩亚洲二区在线-欧美日韩亚洲高清精品

金喜正规买球

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

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

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

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

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

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

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

該示例演示了用戶如何在網(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類開發(fā)工具QtitanRibbonQtitanChartQtitanNavigationQtitanDockingQtitanDataGrid在線訂購現(xiàn)直降1000元,歡迎咨詢慧都獲取更多優(yōu)惠>>

工具推薦:

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

標(biāo)簽:

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

文章轉(zhuǎn)載自:

為你推薦

  • 推薦視頻
  • 推薦活動
  • 推薦產(chǎn)品
  • 推薦文章
  • 慧都慧問
掃碼咨詢


添加微信 立即咨詢

電話咨詢

客服熱線
023-68661681

TOP
亚洲欧美日韩激情在线观 | 一区二区三区免费在线视频 | 99热在线都是精品 | 又大又硬又爽免费视频 | 九九99九| 热门电视剧| 欧美日韩在线一区二区观看 | 欧美mv日韩mv国产网站 | 亚洲一级淫片免费在线观看 | 偷窥清纯综合图区 | 精品国产高清免费在线观看 | 免费国产乱理伦片在线观看 | 国产精品碰碰现在自在拍 | 亚洲日本国产乱码va在线观看 | 国产一区二区精品尤物 | 中文字幕在线视频观看网站 | 怡红院综合图 | 欧美大片在线观看免费视频 | 精品女同一区二区三区免费站 | 中文字幕热久 | 99精品偷自拍 | 亚洲女人天堂网 | 国产精品一区二区三区四区五区 | 羞羞影院午夜男女爽爽影 | 国产免费一区二区三区在线观看 | 一区两区小视频 | 午夜三级三级三点在线 | 99久热国产精品视 | 国产美女一区二区丝袜美腿 | 性xxx| 成人app| 国产精品福利短视在线播放频 | 亚洲欧美日韩高清在线电影 | 无人视频在线观看播放免费 | 国产精品巨作无遮拦 | 久爱免费观看在线网站 | 国产尤物在线视精品亚洲 | 精品国语自产拍在线观看 | 国产91尤物在线观看互 | 成人午夜影院网站 | 热播电视剧免费追剧 | 日韩欧美一区二区不卡看片 | 国产欧美一区二区三区综合野 | 亚洲一本之道高清在线观看 | 国产精品日产欧美在线一区 | 911亚洲精品国内自产 | 免费一级e一片在线播放 | 亚洲欧美日韩、中文 | 国语在线看免费观看视频 | 欧美国产日韩 | 天美麻花视频大全 | 91精品国产福利在线导航 | 国产亚洲日韩欧 | 精品一区二区三区四区在线 | 精品剧情v国产在线观看 | 亚洲综合区夜久 | 日韩精品一区二区三区在线 | 欧美高清在线不卡免费观看 | 精品+在线+国产手机 | 又硬又粗又长又爽免费看 | 一区二区三区免费在线观看 | 国产精品免费视频能看 | 免费午夜无 | 国产乱子伦农村叉叉叉 | 亚洲国产区男人本色vr | 了解最新日韩精品 | 国产精品综合色区在线观看 | 性色aⅴ按摩精品在线 | 日韩综合亚洲色在线影院 | 国产又粗又猛又 | 一二三区在线播放国内精品自产拍 | 国产精品老女人精品视频 | 欧美人成在线观看网站高清 | 国产精品不卡在线观看 | 欧美日韩一区二区成人午夜电影网 | 亚洲国产欧美日韩另类 | 三级三级三级a级全黄三电影 | 日本高清色本在线www | 成人国产精品免费视频不卡 | 精品午夜国产在 | 国产在线高 | 91丝袜精品诱惑在线观看 | 国产免费中文字幕v在线 | 国产女优一区二区在线观看 | 欧美日韩国产精品二区在线观看 | 国产午夜亚洲精品理论片八戒 | 人善交vi | 亚洲综合色自拍一区 | 色777狠狠狠 | 日本aⅴ中文免费观看 | 国产一级淫片a免费播放口欧美 | 日本高清一区免费中文视频 | 成人怡红院视频在线观看 | 国产福利免费的网址 | 久艹伊人精品综合在线 | 亚洲天堂偷拍日韩中文字 | 一区二区三区视频在线播放 | 国产精品日韩精品 | 国产大片91精品免费观看不卡 | 国产福利高颜 | 亚洲三级香港 | 国产男女动作视频在线91 | 99精品国产在热 | 91大神大战丝袜美女在线观看 | 无人视频在线观看播放免费 | 国产精品日韩激情在线观看 | 狠狠亚洲婷婷综合色香五月 | 最新国产精品自在自线发布 | 97亚洲欧 | 亚洲国产在一二区三区不卡 | 亚洲一级二级三级四级 | 国产乱码一区二区三 | 国产精品18| 69精品人人人人 | 欧美交a欧美精品喷水 | 国产羞羞视频在线观看 | 国产精品主播在线 | 99re国产| 午夜三级a三级三点窝 | 国产高清在线精品一区小说 | 欧美xxxx欧美精品 | 亚洲偷窥另类xxxxx乱室佳宾 | 国产日本一线在线观看免费 | 在线观看一二三四区 | 手机免费看一级 | 红杏免费视频网站入口导航 | 成年网站免费入口 | 国产小主播野外在线播放 | 在线视频观看免费视频18 | 国产日本一线在线观看免费 | 动漫精品无 | 亚洲精品免播放器在线观看 | 三年片观看免费观看大全 | 亚洲欧美日韩在线香蕉 | 办公室系列欧美精品 | 国产成a人亚 | 国产乱人视频在 | 日韩精品搭讪在线视频播放 | 一区二区三区免费在线视频 | 中文韩国午夜理伦三级好看 | 国产中文字幕第一页 | 色一情一乱一伦一区二区 | 日韩精品中文字幕在线 | 三级特黄60| 国产初高中生真实在线视频 | 视频二区三区国产情侣在线 | 在线欧美日韩成人 | 国产精品激情综合 | 国产精品亚洲a∨天堂 | 国产91精品系| 麻花影视在线看电视剧软件 | 97视频全国精品 | 国产精品无 | 69精品人人人人 | 成品网站w灬| 热99r| 2025高清免费热播电视剧电影 | 国产一区二区四五区在线视频 | 欧美日韩在线精品一区二区 | 成年网站拍拍拍免费播放 | 日本伦理电影免费观看 | 视频一区二区亚洲欧美 | 成人三级做爰视频在线看 | 色老头免费视频精品三区 | 亚洲欧美人成综合在线最新 | 中文字幕日本不卡 | 国产真实乱xxxⅹ视频 | 国产高清不卡在线观看 | 精产国品一二三产品区别在线 | 亚洲狼人影院 | 91午夜在线免费观看小视频 | 日本b站一卡二不卡三卡四卡 | 精品黑人一| 精品亚洲成a | 国产永久精品91在 | 午夜国产在线一区二区三区 | 国产一级一级一级国产片 | 国产精品自 | 奇米视频在线观看 | 香港三级澳门三级欧洲三级 | 欧美日韩一级视频 | 天天爱天天做天天做天天吃中 | 国产在线脚交免费网站脚丫 | 亚洲欧美另类专区 | 国精品日韩欧美一区二区三区 | 韩国伦理电影在线观免费观看 | 国产欧洲野花a级 | 国产一区二区三区不卡在线观看 | 男人j放进女人p全黄在线 | 欧美另类视频在线观看 | 国产欧美日本不卡 | 亚洲高清一区二区三区不卡 | 国产高清在线观看视频 | 国产福利萌白 | 亚洲国产精品看片在线观看 | 灬大ji巴太粗太长了h | 国产在线拍揄自揄拍免费下 | 日本成本人片视频免费 | 国产哟一区二区三区视频在线看 | 国产a级三级三区成人国产一级婬 | 日本在线tv黄 | 国产区日韩精品一区二区三区 | 欧美日韩性生活视频 | 免费国产a国产片精品 | 国产美日韩精品一区二区在线观看 | 亚洲国产日韩精品 | 性欧美最新巨大乳 | 精品国产拍国产天天人 | 亚洲综合激情另类小说区 | 国产精品福利短视在线播放频 | 国产精品第一区亚洲精品 | 永久免费的污视频网站 | 日本免费一区二区三区最新 | 日韩欧美精品综合一区二区三 | 亚洲色大成网站www在线观看 | 国产精品永久 | 国产欧美日韩va另类在 | 偷怕自怕视频在线观看 | 99久高清 | 91精品欧美一区二区综合在线 | 国产在线不卡精品网站互動交 | 精品人成在线电影 | 999re5这里只有精品w | 国产男女爽爽爽免 | 亚洲国产综合精品中久 | 日本成a人片在线观看网址 国产精品蜜桃丝袜 | 国产一区二区三区水蜜桃 | 精品国产一区二区在线观看 | 亚洲一级淫片免费在线观看 | 日韩欧美国产精品亚洲二区 | 文中字幕一区二区三区视频播放 | 一区二区三区四区视频 | 欧美精品免费一区二区三区在线 | 日韩女同在线二区三区 | 国产又粗又黄又爽的视频 | 日本中文字幕专区视频在线 | 国产亚洲精品国产福利在线观看 | 国产suv精品一区二区四 | 手机国产乱子伦精品视频 | 欧美黑人又大又粗xxxⅹ | 国语精品91自产拍在线 | 91精品啪在线观看国产线免费 | 成人国产一区二区三区精 | 国产日韩精品一区二区三区在线 | xx性欧美肥妇欧美 | 亚洲精品午夜福利在 | 97国产在线视频公开免费 | 亚洲日韩aⅴ小电影 | 国产精品自产拍在线观看55 | 欧美高清中文字幕综合网 | 最近更新中文字幕在线 | 国产精品三级国语在线看 | 午夜成人免费影院 | 97精品视频在线观看 | 欧美v亚洲v综合v国产v | 国产又爽又黄又爽又刺激 | 91精品啪在线观看国产在线 | 一区二区三区国产亚洲网站 | 2025年最新偷拍视频一区 | 精品国产午夜 | 成人国产精品免费视频 | 亚洲精品中文字幕字幕 | 亚洲精品成人一区二区www | 欧美日韩在线亚洲一区二区三区 | 国产福利免费视频 | 国产美女淫秽一区二区三区 | 99r在线精品视频在线播放 | 国内精品视频在线 | 欧美黑粗特黄午夜大片 | 欧美日产国产精品 | 日韩一区 | 欧美手机手机在线视频一区 | 精品国产一区二区三区国产 | 国产精品自在线拍国产 | 日韩精品欧美亚洲高清有无 | 日本一区二区在线视频 | 中文字幕不卡 | 亚洲欧美另类在线观看一区二区 | 日韩伦理一区二区三区 | 疯狂动物城在线观看 | 三级国产短视频在线观看 | 亚洲精品欧美精品日韩精品 | 无人区一线二线三线乱码 | 国产又爽又粗又猛的视频 | 亚洲中文精品视频在线 | 午夜国产精品视频一区 | 国产又大又粗又长免费视频 | 国产中文一区二区 | 韩国v欧美v亚洲v日本v | 在线中文字幕不卡视频 | 日本亚洲欧洲免费无线码 | 最新电影观看 | 一级a做一级a做片性高清视频 | 成年做羞羞的视频 | 人妖系列精品视频 | 秋霞人成在线观看免费视频 | 韩国中文全部三级伦在线观看中文 | 日本免费亚洲视频 | 国产精品亚洲专 | 91视频网 | 2025最新高清免费电影 | 在线观看视频免费 | 愉拍自拍一区首页 | 手机免费在线观看日韩电影 | 亚洲网站视频在线观看 | 欧美精品xxxxbbbb | 欧美a级情欲片手机在线播放 | 亚洲精品欧美中文字幕 | 末发育娇 | 国产精品99精品一区二区 | 一起草视频在 | 亚洲精品欧美日韩一区二区 | 9.1免费版| 精品日韩欧美一区二区在线播放 | 中文字幕综 | 国产日韩欧美视频在线观看 | 亚洲欧美日韩中文字幕在线一 | 欧美日韩精美视频在线观看 | 红杏亚洲 | 亚洲五月综合缴情婷婷 | 亚洲精品成人区在线观看 | 国内精品视频在线 | 国产精品偷伦视频免费观看 | 一本大道综合伊人精品热热 | 成人欧美一区二区三区在线 | 午夜国产福利在线 | 日韩一区二区免费视频 | 久精品国产欧美亚洲色aⅴ大片 | 亚欧洲精品在线视频免费观看 | 小罗莉极品一线天在线 | 亚洲欧美日韩污在线观看 | 91免费观看 | 最新电影电视剧免费在线观看 | 亚洲欧美国产日韩在线观看 | 黄三级高清在线播放 | 在线播放一区二区 | 欧美日韩亚州在线 | 亚洲偷自拍另类图片二区 | 国产视频自拍91 | 久一线视 | 日韩免费一区二区三区高清 | 免费在线观看网址入口 | 天美传奇mv免费观看完整版 | 国产亚洲播放在线 | 国产日韩在线视看高清视频手机 | 人成视频在线观看国产 | 欧美成a人片在线观看久 | 一级在线免费观看 | 国产人成精品综 | 最新电影电视剧短剧在线观看 | 91精品福利 | 亚洲成aⅴ人的天堂在线观看女人 | 91影视永久福利免费观 | 亚洲v欧美v日韩v国产v | 九热视频 | 入口91| 亚洲免费影视乱伦 | 日本中文字幕在线观看全 | 羞羞影院午夜男女爽爽影视大全 | 中文字幕一区二区三区四区 | 国产精品91一区二区三区四区 | 欧美综合亚洲 | 成人专区一区二区三区四区 | 亚洲精品影视亚州色区 | 免费永久在线观看污污的网站 | 国产对白国语对白 | 337p日本欧洲亚洲大胆在线 | 99热精品福利在线观看 | 亚洲欧美综合 | 日本最新免费不卡二区在线 | 日韩一级香蕉片在线观看 | 在线免费视频一区二区 | 成人污污国产在线观看 | 91探花| 亚洲国产欧美日韩精品18 | 性色一区二区 | 不用下载播放器的电影网 | 国产高清在线观看无删减 | 加勒比一本大道香蕉大在线 | 国产精品欧| 多人伦交性欧美 | 国产热女| 精产国品一二三产区m553 | 天美传媒果冻传媒国产电影 | 日本欧美高清全视频 | 国产日产精品 | 韩国三级香港三级日本三级la | 国产又色又爽又黄刺激的影视 | 人妖和人妖互交性xxxx视频 | 国产在线国偷精品产拍 | 免费国产偷人三大片视频 | 天天影院 | 91精品国产闺蜜国产在 | 韩国三级高清手机在线版 | 国产中文字幕永久 | 99一区二区三区国产热视频在线 | 岛国大片在线一 | 免费观看性欧美一级 | 九九九九九在线精品区 | 日本一区二区在线播放 | 欧美特黄特色三级视频在线观看 | 日韩欧美中文字幕一区二区三区 | 欧美草逼网站 | 国内美女91福利在线观看 | 91亞洲播播 | 国产草莓社区在线观看 | 欧美日韩国产一区二区三区在线 | 日韩欧美一区二区三区四区 | 国产精品探花一区在线观看 | 国产特级一 | 国产一级特黄大片特爽 | 91国语精品自产拍在线观 | 亚洲一卡2卡三 | 粗大的内捧猛烈进出在线视频 | 成人性生交大片免费看中文 | 日韩一区二区超清视频 | 99国产精品国产精品九九 | 亚洲激情自拍偷拍 | 亚洲五月天综合 | 国产真实乱子 | 日产一线 | 五月激情综合网 | 91干逼| 激情视频一区二区三 | 国产精品网红尤物福利在线观看 | 成人欧美一 | а√天堂资源官网在线资源 | 美女扒精光 | 国产欧美日本亚洲精品一4区 | 狂野少女电视剧免费播放 | 日韩欧美亚洲一中文字暮 | 亚洲精品国产精品精 | 成人欧美一区二区三区在线蜜 | 日本高清视频在线www色下载 | 在线观看日韩 | 国产精品一在线观看 | 由91亚色 | 亚洲91视频| 国产盗摄在线观看 | 国产狂喷潮在线观看 | 福利一区二区 | 日韩v午夜视频在线观看 | 精品免费国产一区二区三区四区五 | 亚洲一级在线中文字幕 | 亚洲欧美日韩综合在线播放 | 免费在线观看最新高清电影 | 无人视频在线观看免费播放影院 | 免费特级婬片高清视频 | 欧洲自拍拍偷综合 | 日本三级手机在线播放线观看 | 亚洲人成色7777在线观看 | 国产成a人片在线观看视频下载 | 欧美日韩一区二区综合 | 国产精品人成在线观看 | 伊人热热精品中文字幕 | 精品免费在线视频 | 国产产精品亚洲一区二区在线观看 | 国产91免费不 | 亚洲欧美日韩另类国产第一 | 欧洲精品 | 亚洲一区精品中文字幕 | 欧美日韩国产在线一区 | 一区二区三区精品视频免费播放 | 国产悠资源视频在线观看 | 国产精品一区二区三区免 | 亚洲欧美性综合在线 | 日本电影中文字幕 | 日韩在线精品一区二区三区 | 亚洲国产砖一线二线 | 亚洲欧美综合另类 | 国产黄在线观看免费观看网站不卡 | 国产国产人免费人成免费视频 | 真人一级一级99片黄大片 | 欧美国产激情一区二区三区蜜月 | 日韩视频高清欧美一区 | 国产主播在线观看网 | 2025精品 | 草莓社区在线视频 | 动漫无遮| 国产黄a三级三级三级看三级 | 日本三级韩国三 | 亚洲无线码在线一区观看 | 国产一区二区精品尤物 | 中文字幕亚洲不卡在线亚瑟 | 一区二区三区免费在线视频 | 最新在线精品国自产拍网站 | 狠狠丁香 | 亚洲午夜一区二区三区在线观看 | 日本xxxx| 精品视频在线观看 | 亚洲国产丝袜美腿在线播放 | 国产拳头 | 日本vs亚洲vs韩国一区三区 | 日本免费一区二区三区最新 | 日韩午夜视频在线观看 | 亚洲欧美另类激情综合区蜜芽 | 亚洲精品中文字 | 九七九七色伦在线影院 | 了解最新38在线信息 | 美女国产在线观看免费观看 | 国产伦精品一区二 | 国产国产人免费视频成69大陆 | 日韩国产欧美视频 | 国产日韩一区在线精品 | 色与欲影视天天看综合网 | 尤物网红麻酥酥 | a午夜福利精品国产 | 国产高清精品一区二区不卡 | 午夜老司机永久免费看片 | 影视大全电视剧在线播放 | 不卡日韩中文字幕在线观看 | 欧美日韩在线第一页 | 精品国产免费一区二区三区 | xyx性爽欧美观看 | 国产黑色丝袜在线看片不卡顿 | 91干逼| 精品視頻無碼一區二區三區 | 欧美性色aⅴ欧美综合色 | 亚洲免费在线国产视频午夜精 | 欧美va亚洲va在线观看 | 最新热播电影 | 精品影院| a午夜福利精品国产 | 亚洲+欧洲+日产 | 红桃www.ht84pp成人 | 精品国产主播在线亚洲 | 亚洲第一区日韩欧美精品 | 亚洲精品国产品国语原创 | 亚洲色自偷自拍另类小说 | 欧美性受xxxx狂喷水 | 三级综合在线观看精品 | 中文字幕视频二区 | 最新国产亚洲人 | 色综合婷婷在线观看66 | 亚洲日韩制服中文字幕 | 欧美视频一区二区三区在线观看 | 国产精品网红尤物福利在线 | 色久悠悠色久在线观看 | 欧美成aⅴ人高清免费观看 精品人伦一区二区三区 | 亚洲的一区二区精品 | 亚洲综合色区中文字幕 | 日本伊人精品一区二区三区 | 欧美日韩综合另类 | 国产又猛又黄又爽在线视频无 | 三年片中国在线观看免费大全 | 亚洲精品免费看日韩 | 日韩精品视频一区二区三区 | 中文天堂资源在线www | 在线观看国产91精品 | 又粗又大又黄又硬高清视频 | 天美麻花果冻视频大全 | 国产精品网站在线观看免费传媒 | 国产精品香港三级国产 | 免费国产乱理伦片在线观看 | 人人干操| 亚洲精品影院在 | 色色色欧美| 欧美一级中文字幕免费在线 | 亚洲欧美国产日韩精品在线 | 娇小bbw搡bbbb搡bbbb | 亚洲风情亚aⅴ在线发布 | 欧美精品自拍一区 | 亚洲一区二区三区影院 | 国产午夜免费视频 | 在线观看中文字幕码 | 亚洲国产中文字幕 | 欧美激情国产精品视频一区二区 | 国产95在 | 国产jjizz女 女人精aaa | 成人精品一区二区户外勾搭野 | 中文字幕午夜福利片亚洲 | 国产亚洲日韩a | 老司机永久免费视频网站在线观看 | 樱桃视频香蕉 | 99精品国产在 | 国产午夜福利院757视频 | 91免费在线视频 | 91极品美| 国产亚洲精品ae86 | 国产一区二区xxx | 成人69激情视频在线观看 | 国产一区二区三区四区激情 | 全网热播最新电影电视剧 | 国产日韩精品一区在线观看 | 美美哒日本中文 | 日韩一区二区超清视频 | 久精品国产欧美亚洲色a大片 | 亚洲国产天堂久 | 免费国产午夜激情片 | 果冻传媒国产电影免费看 | 91精品国产自产在线观看永久 | 国产日本精品视频 | 免费人成视频在线播放视频 | 风流老熟女一区二区三区 | 国产萌白酱喷水在线播放尤物 | 国产亚洲精品激情都市 | 亚洲熟女综合一区二区三区 | 中文字幕精| 亚洲中文字幕乱码一区 | 免费日本国| 国产高清vs在线视频 | 亚洲国产欧美在线人网站 | aaa午夜级特黄日本大片 | 国产福利一区二区三区在线视频 | 亚洲欧美日韩高清一区 | 亚洲影院 | 激情欧美视频 | 精品国产福利第一区二 | 国产精品福利自产 | 精品国偷自产在线不卡短视 | 手机看片国产欧美日韩 | 国产自产拍精品视频免费看 | 国产极品美女一区二区三区 | 精品女同一区二区三区 | 中文字幕在线视频 | 青春草在线视频免费观看 | 欧美日韩亚洲精品瑜伽裤 | 国产aⅴ片 | 最近中文字幕完整版2025一页 | 免费视频大片在线观看 | 国产思思精品视频 | 福利吧导航 | 国产白领邻居在线视频 | 蜜臀精品一区二区三区在线观看 | 免费最新电视剧 | 国产午夜亚洲精品不卡电影 | 国产在线观看 | 免费动漫| 最近高清中文在线字幕在线观看 | 国产乱视频在线观看 | 一区二区三区在线观看高清视频 | 最近日本电影免费观看全集 | 色久悠悠婷婷综 | 99精品国产高清一区 | 日韩视频在线观看一区 | 国产热久| 国产女人精品在线直播 | 野花韩国高清免费视频6 | 电视剧大全免费 | 国产高清一区二区三区四区 | 国内精品国内精品自线一二三 | 欧美日本综合一区二区三区 | 99欧美午夜一区二区福利 | 亚洲一二三区在线观看 | 野花日本大全免费 | 午夜福利小视频400 日本三级做a全过程在线观看 | 亚洲欧美经典 | 国产精品日韩欧美 | 亚洲国产日韩欧美一区二区三区 | 在线不卡高 | 日本精品不卡在线观看 | 国产一区二区三区高清视频 | 97色伦午夜国| 亚洲人精品午夜射精日韩 | 日产亚洲一区二区三区 | 影视大全电视剧在线播放 | 国产欧美日韩一区二区三区在 | 精品亚洲欧美中文字幕在线看 | 韩国三级伦在线观看久 | 中文字幕一区二区不卡 | 免费91最新地址永久入口 | 日韩成全视频观看免费观看高清 | 九九热在线观看官网 | 真人性生交免费视频 | 又粗又大又黄又爽的免费视频 | 色偷偷中文字 | 亚洲日韩精品欧美一区二区 | 激情五月综合激情在线观看 | 日韩一区二区三区四区区区 | 国产精品巨作无遮拦 | 欧美激情狠狠14p | 成都在线观看免费观看 | 欧美伦理一区 | 两个人免费视频观看高清视频 | 99精品久 | 韩国三级香港三级日本三级 | 亚洲精品在线视频 | 在线观看视频导 | 国产专区视频 | 国产精品福利尤物youwu | 天天影视人人综合日韩 | 日本中文字幕第 | 99视频精品全部品全正 | 一级特黄录像免费播放中文 | 成年人看的视频网站 | 亚洲经典 | 国产精品污www一区二区三区 | а√中文在线资源 | 2025年最新偷拍视频一区 | 在线播放国产不卡免费视频 | 国产一级特黄aa大片在线观看 | 欧美精品免费在线观看 | 日韩午夜在线视频 | 日韩大片在线永久免费观看网站 | 91精品国产一区蜜桃 | 国产亚洲午夜高清国产拍精品 | 国产又猛又黄 | 99这里都是精品 | 国产男女爽爽爽免费视频 | 伊人焦久综合影院每日更新 | 高清影视大全 | 精品国产sm捆绑最大网免费站 | 伊人影音| 国产激情在线观看免费视频 | 日本一区二区三区视频在线观看 | 国产思思精品视频 | 国产人妖 | 日本一卡2卡3卡无卡免费 | 国产精品亚洲日日摸夜夜添 | 在线日韩国产 | 国产又色又爽又黄的网站在线 | 免费高清电影影视大全 | 国产美女一区二区三区 | 日韩欧美在线综合网高清 | 精品一区二区三区在线视频 | 天堂草原影院电视剧 | 一区二区三区免费在线观看 | 亚欧精品一区二区三区四区 | 日韩一区精品视频一区二区 | 国产又色又爽又黄的网站在线 | 成人午夜福利免费体验区 | 日本三级韩国三级香港三级a级 | 国产精品玩偶在线 | 亚洲视频网址 | 亚洲一二三区在线观看 | 国产欧美日韩视频在线 | 国产美女一区三区在线观看 | 日韩精品极品视频在线观看免 | 午夜福利一区二区三区在 | 电视剧大全手机 | 国产精品人成在线播放新网站 | 最新欧美精品一区二区三区不卡 | 无人视频在线观看播放免费 | 97高清国语自产拍 | 国产精品不卡视频 | 国产综合色产在线视 | 成人啪精品视频免费网 | 国产精品免费一区二区 | 欧美黑人又大又粗xxxxx | 在线播放国产精品三级 | 亚洲综合另类小说色区一 | 开拓亚洲色偷偷偷综合网的同时 | 老熟女重囗味 | 中文字幕久 | 国产精品日韩激情在线观看 | 日本精品无人区1区2区3区 | 99精品在| 欧美三级在线观看视频 | 国产精品午夜福利在线观看地址 | 国产手机在线国内精品软件的特点 | 秋霞网国产 | 日韩在线成年视频人网站观看 | 热门电影综艺电视剧手机在线观看 | 全国三级网站在线观看 | 天美麻花果冻苏蜜清歌 | 国产免费a视频 | 精品成人福利在线播放 | 亚洲日本欧美日韩中文字幕 | 欧美综合视频在线观看 | 精品国产免费人成在线观看 | 亚洲国产精品va在线观看香蕉 | 精品一区二区三区在线视频 | 91秒拍国产福利 | 美女视频黄频a美女大全 | 日本高清中文字幕在线观穿线视频 | 日韩在线欧美 | 欧美激情一区二区三区中文字幕 | 亚洲精品∧v在线观看 | 高清在线观看视频 | 日本三级| 欧洲乱码伦视频免费国产 | 国产精品视频一区二区噜噜 | 欧美精品vid | 国产噜噜噜精品免费 | 国产一级大片在线观看 | 欧美精品免费在线观看 | 国产精品极品美女自在线观看 | 免费亚洲大片app下载 | 最近免费中文mv在线字幕 | 亚洲欧美一区二区三区久本道 | 精品国产一区二区三区不卡 | 成人污污污www网站免费 | 宅男色影视亚洲人在线 | 日韩精品国 | 国产在线观看入口网站 | 中文字幕国产 | 国产乱子伦精品 | 977精品视频在线观看 | 欧美高清另类自拍视频在线看 | 欧美理论片在线观看一区二区 | 成年入口无 | 亚洲欧美国产国产一区二区三区 | 韩国午夜理伦三级理论在线观看 | 午夜理论片大全福利 | 手机看片1204日韩 | 手机在线视频 | 村长扶着小萍的腰猛的挺进 | 97在线观看免费视频观看 | 99热这里只有精品 |