翻譯|使用教程|編輯:鮑佳佳|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。
該示例顯示了如何使用添加新行功能。
該示例演示了用戶如何在網(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ā)工具QtitanRibbon、QtitanChart、QtitanNavigation、QtitanDocking、QtitanDataGrid在線訂購現(xiàn)直降1000元,歡迎咨詢慧都獲取更多優(yōu)惠>>
工具推薦:
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自: