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

金喜正规买球

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
敌伦交换一区二区三 | 欧美日韩亚洲国产综合在线观 | 91精品丝袜国产在线一区 | 成人免费视频软件网站 | 91福利免费体验区观看区 | 亚洲精品国产精品国自产观看 | 日本三级网站网址 | 日本九九热在线观看官网 | 国产又大又硬又粗 | 日本一二三区不卡高清区 | 亚洲综合视频在线观看 | 日日狠狠太爽 | 免费在线视频 | 免费的影视大全 | 113美女写真 | 91社区在线观 | 国产一区二区三区日韩欧美 | 欧美自拍偷拍一区二区 | 欧美国产综合欧美视频 | 国产精品亚洲玖玖玖在线观看 | 日韩午夜视 | 亚洲成aⅴ人片久青草影院 国产91精品系列在线观看 | 一边喂奶一边被爱 | 在线观看亚洲人成网站 | 日韩专区在线观看 | 色色色setu| 国产欧美一区二区精品仙草咪 | 入禽太深免费 | 国产激情a∨在线视频播放 国产激情自拍亚洲精品国产精品精 | 日韩欧美国产精品免费一二 | 浮力影院亚洲国产第一页 | 日产乱码区别免费必看 | 2025最流行电视剧 | 亚洲一区在线综合 | 国产亚洲一卡二卡三卡四卡 | 在线观看视频欧美 | 成人精品视频 | 免费aⅴ大片在线观看 | 国产精品盗摄在线观看 | 男人精品一线视频在线观看 | 日本一区二区三区在线观看入口 | 在线永久观看国产精品电影 | 老女人擦| 自宅警备员ova动漫 国产第一区 | 国产精品综合在线观看 | 欧美日本综合一区二区三区 | 丫头13第一次真紧 | 亚洲精品国产高清在线观看 | 成人精品日本亚洲电影院电影 | 免费国产高清视频 | 中文自拍日本国产 | 国产频99热精品在线 | 强奷乱码中文字幕熟无 | 看h片的网站 | 老子影院午夜伦不卡 | 国产专区欧美专区在线观看 | 亚洲欧美日韩中文播放 | 国产精品高清全国免费观看 | a大片高清在线观看 | 麻花传媒| 日韩一级一欧美一级国产 | 欧美动作大片在线观看 | 国产aⅴ视频免费观看国语 91大神在线视频免费观看 | 亚洲最新国产一区二区三区 | 频道国产在线资源 | 激情刮伦小说目录 | 午夜一区一品日本 | 国产精品区免费视频 | 奇米精品视频一区二区三区 | 三年片在线观看免费 | 国产大片91精品免费观看不卡 | 国产资源精品一区二区免费 | 亚洲私人影院 | 亚洲男人 | 九操中文字幕在线观看 | 在线精品亚洲欧洲第一页 | 中文字幕精品一二三四五六七八 | 日韩四级片在线看 | 国产一区二区三区在 | 免费国产黄频在线观看视频 | 中文字幕不卡免费高清视频 | 中文字幕人成乱码熟女69 | 内地级a艳片高清免费播放 五月社区免费 | 国产手机精品一区二区 | 国产在线第一区二区三区 | 国产美女一区二区丝袜美腿 | 精品国产免费1区 | 欧美日韩国产综合视频在线观看 | 日本亚洲欧美国产日韩ay | 国偷自产视频一区二区久 | 国产国产人免费人成 | 污污污污污www网站免费观看 | 中文字幕热久 | 亚洲精品一区二区三区在 | 中文字幕一区日韩精品 | 日韩精品福利 | 中文字幕在线观 | 野花社区 | 青青国产精 | 秋霞人成在线观看免费视频 | 欧美日韩一区二区在线 | 国产又黄又猛又粗又爽的a 羞羞影视 | 热播电视剧免费追剧 | 精品区一区二区三 | 国产日本欧美在线观看乱码 | 色综合婷婷在线观看66 | 国产在线精品一区二区高清 | 国产在线不卡精品网站互動交 | 韩国日本亚洲欧洲一区二区三区 | 中文字幕国产一区 | 国产男同gaya | 亚洲精品国产精品精 | 星辰影院| 红杏亚洲影院一区二区三区 | 中文字字幕乱码高清二本道资源站 | 三年片在线观看免费大全哔哩哔哩 | 人成视频在线观看 | 91精品啪在线观看国产91 | 色两性网欧美 | 国产a∨国片精品一区二区 欧美一区二区三区日韩免费播 | 亚洲囯产一区二区三区 | 免费mv视频7| xxxx视频| 日本夫妻激情生活b区 | 日韩欧美一区二区三区精品 | 国产91丝袜在线播放网站 | 亚洲免费青草视频在线 | 五月天激情视频a级在线版 无吗一区二区三区 | 经典影片免费在线观看 | 日韩网站在线观看 | 深夜爽爽动态图无遮无挡 | 天天槽天天槽天天槽 | 4399中的精品双人 | 欧美精品一区二区三区四区 | 亚洲最新中文字幕aⅴ天堂 亚洲成aⅴ人的天堂在线观看女人 | 99国产在线 | 少女韩国在线观看完整版免费 | 午夜成人影院网站18进 | 国产视频高清在线观看 | 高清免费 | 搡女人真爽免费视频大全 | 亚洲国产精品大秀在线播放 | 免费人成动漫在线播放r1 | 99精品一区二区三区 | 日韩精品一区二区三区中文在线 | 排行榜电视剧全集手机免 | 日韩r级电影在线观看 | 国在线视频 | 欧美最猛性xxxxx大叫 | 无色码中文字幕亚洲精品 | 免费a级片在线观看 | 国产资源免费观看 | 亚洲视频偷拍视频2亚 | 91福利免费体验区观看区 | 香港三级日本三级人妇三99 | 国产一区美日一区日韩一区 | 国产欧美日韩成人 | 97蜜桃网| 欧美+日本+国产+在线观看 | 国产精品高清一区二区三区不卡 | 人人狠人人透人人爱 | 亚洲影院 | 欧美一区二区免费 | 午夜电影网在 | 中文字幕亚洲中文字幕 | 视频三区 | 手机在线观看日韩电影大片 | 猫眼影院 | 日本在线中文字幕第一视频 | 水蜜桃视频网站在线观看网址 | 午夜亚洲 | 黑人和欧美人交bbw 午夜电影网在 | 精品国产不卡在线观看免费 | 91免费网址 | 91国内自产 | 日韩综合在线欧美中文字幕 | 国产乱码一区二区三区免费 | 男女午夜视频 | 一区二区欧美日韩高清免费 | 俄罗斯美女真人性做爰 | 国产欧美日韩成人 | 舔射插啊~在线观 | 电影天堂| 亚洲成v人片在线观看福利 一二三四视频 | 天天澡日日澡狠狠欧美老妇 | 精品国产国产综合精品 | 国内成人福利短视频在线 | 在线看片国产日韩欧美亚洲 | 亚洲精品aⅴ中文字幕乱码 国产在线ts | 国产乱人视频在线观看播放1 | 欧美日韩在线在线观看 | 伦视频在线观看 | 亚洲欧美色一区二区三区 | 日韩亚洲国 | 91丝袜精品诱惑在线观看 | 经典a三级在线理论香港 | 三级网站视频 | 亚洲国产欧美日韩一区 | 在线亚洲小视频 | 九九在线精品 | 日韩在线观看免费 | 大地影院mv高清在线观看免费 | 亚欧洲精品在线视频免费观看 | 国产又粗又 | 在线中文字幕有码中文 | 视频一区国产 | 中文字幕亚洲中文字幕 | 国产亚洲日韩欧美一区二区三区 | 亚洲欧美日韩ⅴ在线观看91 | 欧美日韩国产高清精卡 | 国产亚洲精品精品国产亚洲综合 | 国产欧美日韩另类精彩视频 | 欧美日韩国产精品一区二区在 | 欧美精品a欧洲黑 | 日韩欧美性爱精品一区二区 | 999国产高清视频免费看 | 国产精品综合日韩精品第一页 | 国产视频中文字幕在线观看 | 国产做爰一区二区 | 国产在线ts| 国产悠资源视频在线观看 | 国产日韩精品一区二区在线观看 | 日韩v午夜视频在线观看 | 国产乱码一区二区三区爽爽爽 | 51精品国产人成在线 | 最近2025中文字| 最新中文字幕在线观看免费不卡 | 91视频直播| 欧美日韩精品一区二区在线播放 | 欧美大bbbbbbbbbbbb | 亚洲欧美日韩在线一区天天看 | 把伸进女人的www下载 | 成年人24小时在线免费观看视频 | 羞羞视频免费入口网站 | 国产中文字幕玖玖 | 日本乱熟 | 羞羞影院午夜男女爽爽视频 | 亚洲日韩欧美九 | 色哟哟网站入口在线观看视频 | 色欧美亚洲欧 | 精精国产xxxx视频在线播放 | 青苹果乐园影院在线播放 | 亚洲综合色一区二区三区 | 美女视频在线永久免费观看 | 精品人成在线电影 | 欧美激情日韩 | 干天堂在| 国产羞羞视频在线观看 | a在线视频播放观看免费观看 | 欧美a级v片在线观看 | 在线天堂免费中文字幕 | 中文字幕精品亚洲无线码一区应 | 欧美高清一级 | 亚洲成a人a∨久在线观看 | 国产午夜成福利在线观看 | 亚洲欧美日韩在线香蕉 | 欧美另类制服丝袜国产 | 一二三四区| 亚洲人免| 五月天丁香婷深爱综合网 | 在线日韩欧美视频一区二区 | 国产精品日本一区二区不卡视频 | 成人国产99视频在线观看 | 午夜视频在线播放 | 不卡在线播放中文字幕在线 | 亚洲国产精品色一区二区 | 玉足在线观看 | 国产午夜福利精品一 | 午夜成人影视 | 国产精品专区第二 | 欧美视频一区免费精品 | 日韩精品制服诱惑中文字幕 | 在线观看免费人成视频网 | 亚洲制服丝袜自拍中文字幕 | 亚洲欧美一级 | 欧美日韩亚洲第一区 | 精品国产—亚洲人成在线 | 海量资源每 | 韩国三级香港三级日本三级la | 国产免费视频观看网站 | 日韩欧美tv一区二 | 97国产在线公开免费观看 | 欧美日韩国产网站 | 日韩精品一区二区三区中 | 99热精品福利在线观看 | 日韩成人免费 | 狠狠狠地啪香蕉 | 日韩不卡高清中文字幕 | 国产精品亚洲二区在线看 | 在野外被三个男人躁一夜 | 国产精品永 | 直播app下载 | 国产精品高清在线观看93 | 精品国产福利在线观看91啪 | 欧美性a视频 | aⅴ日本亚洲欧洲免费 | 亚洲一二三四中文字幕 | 亚洲精品午夜不卡在线播放 | 又色又爽又黄的视频 | 国产高清不 | 国产一级a爱做片天天 | 超97在线观看视频 | 国产中文亚洲日韩欧美 | 亚洲自拍欧美 | 国产手机视频在线 | 新版资源天堂中文 | 国产亚洲欧美另类一区 | 日韩中文字幕无 | 免费国产va在线观看视频 | 国产全黄三级三级 | 香蕉久人久人青草青草 | 日本欧美一区二区三区在线播放 | 在线观看国产 | 好吊妞在线视频免费观看综合网 | 天美传媒官方网站 | 亚洲精品国产精品 | 2025国产精品自在拍在线播放 | 国产特级| 成aⅴ人免费观 | 中文字幕在线不卡精品视频99 | 天天综合网~永久入口 | 亚洲欧洲一区 | 免费最新电视剧电影随心看 | 亚洲人成电影院在线观看 | 日韩免费视频 | 国产sm重味一区二区三区 | 超前点播最新电影电视剧 | 少女哔哩 | 亚洲欧美综合色区 | 一区二区色综合 | 最新国产乱视频伦在线 | 国产精品视频一 | 小说区图片区激情区视频区 | 亚洲人成在线影院 | 亚洲精品不卡 | 国产精品专区第5页 | 在线观看精品国产 | 亚洲欧洲精品国产区 | 蜜桃视频91 | 韩国福利影视一区二区三区 | 天天躁日日躁狼狼 | а天堂中文最 | 凄辱护士日本电影免费看 | 欧美精品亚洲精品日韩专区 | 国产精品制服丝袜另类 | 国产伦在线视频大全 | 午夜激情视频 | 最近中文字幕2025 | 偷自拍亚洲视频 | 国产区免 | 女同精品一区二区 | 神马电影院| 91午夜福利国产在线观看 | 精品乱码一区二区三四区视频 | 国产视频精| 日韩专区中文字幕在线 | 国产在线欧| 疯狂欧美牲乱大交777 | 日韩午夜成 | 全网热播最新电影电视剧 | 亚洲欧洲日韩 | 午夜看片a福利 | 九九在线精品视 | 中日韩在线视频 | 国产精美视频在线观看 | 黑人性较视频免费视频 | 日本免费人成视频播放 | 在线看国产一区二区三区 | 欧美日韩不卡中文网 | 国产精品黑人一区二区三区 | 欧美精品国产制服一区 | 日韩欧美在线综合va网 | 精品国内一区二区三区免费视频 | 日韩精品视频一区二区三区 | 一二三四在线观看免费视频 | 在线精品视 | 日本一区二区三区不卡视频中 | 亚欧精品一区二区三区四区 | 亚洲人成激情在线播放 | 欧美一级特黄aaa大片在线观 | 91免费视视频在线观看 | 国产精品外 | 国语自产精品视频 | 日韩欧美精品一 | 很黄很色的免费视频在线观看 | aaaa级日本片免费视频 | 亚洲日本影院在线 | 国产福利一区二区在线精品 | 国产亚洲a∨片在线观看 | 自在现偷 | 亚洲色成人www永久网站 | 91草莓视频在线观看 | 国产思思99re99 | 97国产在线视频公开免费 | 最近更新在线中文字幕 | 人人添逼人人摸人人 | 最新免费电影大全 | 日本视频一区二区三区 | 亚洲国产日韩a在线观看 | 精品国偷自产 | 日本一级a大片在线观 | 国产一区二区免费播放 | 免费在线 | 中文国产日韩欧美视频 | 国产不卡福利片在 | 亚洲综合娱乐在线视频 | 在线午夜看片福利深夜导航 | 欧美福利影院第一页 | 亚洲人成激情在线播放 | 日韩中文网 | 亚洲国产精品无 | 最新国产99热这里只有精品 | 日本精品二三区视频在线观看 | 国产su| 欧洲乱码伦网站 | 午夜视频一区二区三区 | 成人午夜福 | 中文国产欧美影视 | 亚洲精品视频在 | 国产愉拍99线观看 | 乱码一码二码三码四码狼人 | 人人色在线视频播放 | 亚洲特黄特色免费手机在线视 | 国产精品一区成人精品果冻传媒 | 国产又黄的a级鬼片在线观看 | 自在拍在线播放 | 亚洲欧美日韩不卡在线观看 | 国产痴汉系列在线播放 | 勃起又长又黑又粗毛又多 | 日韩精品在线观看 | 色人阁第四色 | 亚洲国产的精品太乱码一区二区 | 日韩a人 | 日韩成人 | 欧美亚洲视 | 可以看差差直播的软件 | 国产亚洲自拍一区 | 日韩在线观看91精品免费 | 国产乱妇乱子在线播放视频 | 在线视频一区二区三区不卡 | 国语自产拍视频在线观看 | 亚洲欧洲中文字幕免费看 | 一级国产| 日韩精品三级一区二区 | 黑人巨大精品欧美一区二区免费 | 国产偷∨国产偷∨精品视频 | ⅴa在线观看 | 99精品国产一区二区三区不卡 | 国产亚洲精 | 日本b站一卡二不卡三卡四卡 | 亚洲一区二区三区在线观看播放 | 亚洲aⅴ精品一区二区三区 亚洲成v片 | 免费国产va在线观看视频 | 久99视频精品免费观看福利 | 午夜激情影 | 午夜影视 | 精品欧美亚洲影视 | 乱码午夜 | 在线精品自拍亚洲第一区 | 欧美精品一二三区 | 日韩一中文字 | 初爱免费视 | 国产在线欧美日韩精品一区 | 中文字幕国产专区99 | 精品一二三区 | 国产精品小电影 | 日韩高清国产一区在线 | 亚洲一区二区三区四区在线 | 欧美区精品系列在线观看不卡 | 亚洲高清在线看 | 日韩亚洲国 | 大地影视mv高清视频在线观看 | 银杏影视 | 潦草影院 | 在线观看精品国产福利片app | 韩国三级在线观看 | 国产婬乱视频免费 | 一级一人片 | 在线鲁鲁视频免费观看 | 尤物网红麻酥酥 | 在线视频欧美 | 国产乱码一区二区三区免费 | 日欧精品卡2卡3卡4卡5卡 | 欧美在线成人怡红院 | 国产一区二区在线观 | 高清线视频 | 成人免费看www网址入口 | 银杏影视| 中文字幕一区在线观看视频 | 精品一区二区免费视频 | 亚洲老妈激情一区二区三区 | 国产日韩欧美在线精品综合网 | 精品国产免费1区 | 精品国产91乱码一区二区三区 | 最美情侣高清视频大全 | 日韩亚射亚洲国产第一 | 国产黄大片在线视频 | 真人二十三式性视频(动) | 精品欧美亚洲影视 | 综合永久入口 | 国产第一在线视频 | 亚洲最大 | 免费人成在线视频无 | 午夜神马| 欧美日韩国产中文字幕 | 欧一美一性一交一乱一性一 | 国产日韩欧美一区二区三区精品 | 国产在线观看第二十三页 | 精品国产综合区 | 91精品国产自| 日韩精品区一 | 大片在线观看免费 | 国产99这里只有精品 | 国产一区福利在线 | 国产精品视频一区二区三区四 | 国产精品视频大陆精大陆 | 午夜影视在线播放免 | 亚洲日韩在线中文字幕第一页 | 无限资源最 | 夜夜爽一区二区三区精品 | 日产中文字幕在线精品一区 | 国产中文字幕永久 | 三区在线观看不卡 | 99re8这里有精品热视频 | 蜜桃一区二区三区 | 99xxxx日本| 亚洲专区日韩专区在线观看 | 91成人精品一区二区三区四区 | 国产午夜福利精品一区 | 成人国产欧美精品一区二区 | 羞羞影院午夜男女爽爽影视大全 | 日韩在线看精品免费视频 | 三级在线国产 | 国产在线观看91精品2025 | 性xxx免费视频 | 欧美人成中文视频在线观看 | 一个人看的www视频免 | 日本高清免费观看 | 午夜成人免费电影 | 水蜜桃成视频人在线看 | 精品国产aⅴ | 国产综合精品一区二区 | 欧美激情区二区一区三 | 91高清国产在线观看 | 国产国语一级在线播放视频 | 一级一黄免费视频在线看 | 神马影院88 | 国产福利日本一区二区三区 | 国产伦精品一区二区三 | 喷了一地| 亚洲一区在线综合 | 国产午夜视 | 欧美日韩国产综合视频 | 一级中文在线播放 | 国产做爰一区二区 | 欧美韩国电影免费在线观看 | 国产91影院 | 91福利国产在线人成观看 | 国产亚洲欧美丝袜 | 国产乱理伦片在线观看 | 色色色色色色欧美日韩 | 国产一区二区三区日韩精品 | 中文字幕无线码中文字幕网站 | 国产一区二区三区不卡在线观看 | 果冻传媒一区二区天美传媒 | 成人午夜影院 | 免费成人激情在线 | 亚洲色久婷婷 | 免费国产在线精品一区二区 | 92午夜福利手 | 欧美性色欧| 91热成人精品国产免费 | 区小说区激情区图片区 | 免费国产自在线拍 | 欧美日韩性生活视频 | 激情六月在线视频 | 欧美在线色 | 亚洲一区二区福利在线观看 | 人人干美女 | 日韩精品一区二区三区影院 | 午夜影视免费 | 亚洲中中文字幕第一页 | 欧美日韩国产精品一区二区在 | 一区二区三区影院 | 亚洲一级qv无 | 日本顶级rapper潮水老狼 | 九九99九| 真实国产普通话对白乱子子伦视频 | 字幕乱码一二三四 | 免费看污视 | 最新理论片在线观看免费 | 中文字幕在线观看一区二区 | 精品福利一区二区视频 | 91成人国产网站在线观看 | 六月婷婷国产精品综合 | 亚洲精品国产福利在线观看 | 国产自经典三级在线观看 | 亚洲h成年动漫在线观看不卡 | 亚洲成v| 国产女学生破女初在线观看 | 99爱国产精品免费高清在线观看 | 日韩高清码中文字幕日韩 | 69精品人人人人人人人人人 | 亚洲精品永久一区 | 亚洲国产区男 | 欧美一级a人与 | 一区二区三区亚洲高清 | 免费无人区一码二码乱码区别在哪 | 国产对白国语对白 | 国产精品亚洲五月天高清 | 亚洲精品免费 | 国内自拍中文欧美 | 亚洲图片国产 | 亚洲国产日韩a在线观看 | 国产又大又粗又黄又爽的视 | 97人伦色伦成人免费视频 | 成人免费高清观看在线 | www.五月天激情 | 免费a视频在线观看 | 亚洲精品无播 | 91精品国产自产在线观看永久 | 亚洲综合在线播放 | 国产福利一区二区在线精品 | 精品一区二区三区密臀在线 | 亚洲愉拍自拍欧美精品app | 一区二区三区国产精品午夜福利 | 亚洲精品综合色区二区 | 五月天激情 | 后进极品翘臀在线播放 | 完整版在线观看 | 亚洲码欧美码一区二区三区 | 在线精品日韩 | 午夜一级特黄 | 国产高清在线精品一区在线 | 欧美日韩国产58香蕉在线视频 | 麻花星空影视传 | 大陆aⅴ国 | 国产大片黄在线观看 | 中文字幕在线看日本大片 | 尤物在线精品视频 | 国产精品一区二区高清在线 | 久碰免费视 | 日本视频 | 亚洲综合色区在线播放 | 亚洲欧美日本韩国在线观看 | 国产一区二区在线观看动漫 | 亚洲欧美综合一区二区三区黄大片 | 亚洲春黄在线观看 | 国产亚洲高清一区二区 | 三区在线观看不卡 | 欧美xxxx做 | 日本一区二区在线不卡 | 国产乱人视频免费观看 | 亚洲视频在线观看 | 欧美日韩精品福利 | 国产亚洲欧美日韩高清专区 | 亚洲人成亚洲人成在线观看 | 欧美亚洲人成网 | 国产人在线成免费 | 视频一区中文字幕日韩专区 | 亚洲色精品vr一区二区三区 | 久热韩国综合中文字幕视频 | 亚洲精品乱拍国产一区二区三区 | 亚洲色人妇性爱视频 | 一区二区三区免费在线视频 | 国产99视频在线观看免费 | 九九国产视频 | 国产黄大片在线观看视频 | 国产精品多p对白交换绿帽 国产日本韩国视频 | 欧美日韩日处女黑人 | 96福利国产在线 | 欧美精品黄页在 | 亚洲一二三区在线观看 | 亚欧免费大片在线观看 | 欧美黑人又大又粗xxxⅹ | 97se亚洲| 三区四区 | 国产欧美综合精品一区二区 | 午夜亭亭 | 999www人成免费视频 | 一级特黄aaa大片在线观看视频 | 国产理论片高清 | 午夜电影这里只有精品 | 亚洲成aⅴ人片在线观看www | 国产精品高清尿小便嘘嘘主演 | 太粗太硬小寡妇受不了 | 欧美日韩精美视频在线观看 | 多人伦交性欧美 | 91精品人 | 国产精品天干天干在线观看 | 免费在线观看国内色片网站网址 | 综合国产日本 | 亚洲精品在看在线观看高清 | ynzhcl.org.cn | 亚洲高清国产品国语在线观看 | 国产精品夜色一 | 国产特黄特色a级在线视 | 成a人影院在 | 国产精品一区中文字幕 | 日本高清视频色www在线观看 | 国产一级特黄a大片免费 | 亚洲精品国产精品国自产 | 亚洲天堂偷拍日韩中文字 | 国产拳头交一 | 99久视频只有精品2025 | 狂野欧美激情性xxxx | 韩国高清乱理伦片中文字幕 | 日本欧美一区二区三区在线 | 欧美日韩色另类综合 | 亚洲日本va午夜在线电影 | 一本一道日韩一二三四区免费 | 国产伦理一区的二区三区四区 | 亚洲日韩欧美一区二区三区在线 | 午夜影院在线看 | 99精品国产福利免费一区二区 | 日本高清无卡码 | 亚洲国产精品色一区二区 | 国产男女爽爽爽爽爽免费视频 | 鲁丝一区二 | 九九在线免费视频 | 黄工厂精品视频在线观看 | 国产欧美一区二区三区精品 | 国产精品自在线拍国产 | 亚洲а∨天堂在线网站 | 最近日本免费观看mv免费版 | 日亚洲第 | 亚洲一本之道高清在线观看 | 激情综合五月天 | 欧洲自拍拍偷综合 | 亚洲国产欧美在线一区二区 | 国产亚洲欧洲aⅴ综合一区 ady中文字幕 | 亚洲欧洲中文字幕免费看 | 欧美理论片在线观看一区二区 | 欧美日韩中文亚洲v在线综合 | 亚洲国产日韩a不卡线欧美 日韩a优精品在线观看 | 欧美午夜性刺激在线观看免费 | 亚洲精品a∨在线国自产拍 露脸对白不带套在线播放 亚洲一级大片 | 国产女人喷潮在线观看视频一 | 国产精品jizz在线观看直播 | 成人美女国产精品免费视 | 红桃www.ht84pp成人 | 亚洲综合日韩精品欧美综合区 | 日韩aⅴ黄日韩a影片 | 国产精彩视频在线观看91 | 中文字幕在线免费 | 国产欧色美视频综合二区 | 又湿又紧又大又爽又a视频 日韩视频免播放在线观看 欧美亚洲日韩国 | 国产午夜 | 国产又黄又大又粗的视频 | 最新91天堂国产电影在线观看 | 愉拍自拍一区首页 | 亚洲高清中文字幕综合网 | 在线观看免费人成视频国产 | 成人午夜视频一区二区国语 | 亚洲电影 | 538国产精品一区二区在线 | 国产伦在线视频大全 | 亚洲欧美日本综合 | 亚洲欧美另类在线观看一区二区 | 日产精品一线二线三线芒果 | 国产福利不卡视频在免费 | 中文字幕第一页亚洲 | 文中字幕一区二区 | 暴躁少女csgo视频 | 国产精品日韩专区第一页 | 日韩精品免费一级视频 | 性欧美乱妇高清come | 国产乱色国产精品免费视频 | 九九综合九色综合网站 | 欧美特级理论片免费看 | 成年网站免费入口 | 愉拍自拍一区首页 | 韩国午夜理伦三级理论在线观看 | 亚洲欧美综合区自拍另类 | h在线观看网站 | 成年人24小时在线免费观看视频 | 在线观看亚洲一区二区三区 | 日韩欧美亚洲一区二区综合 | 欧美日本免费一 | 男人猛躁进女人成人免 | 国产偷国产偷亚 | 亚洲一区二区三区高清在线播放 | 成人短视频黄 | 亚洲中文字幕一二三四区 | 亚洲国产精品色一区二区 | 免费h网站 | 黑人巨大性欧美一区二区三 | 69一区二三区好的精华液 | 午夜天堂 | 人成视频播放 | 亚洲中文精品乱伦 | 国精产品一区一区三区mba下载 | 日本高清视频一区二区三区 | 国产精品人娇在线内谢 | 日韩国产一区二区三区地区 | 亚洲人成色7777在线观看 | 网友自拍视频一区二区三区 | 韩国三级bd高清在线观看 | 国产在线视频欧美一区二区三区 |