转帖|使用教程|编辑:鲍佳佳|2021-09-06 11:04:40.607|阅读 214 次
概述:该示例演示了用户如何向网格输入新行。新行可以位于视图的顶部或底部。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
QtitanDataGrid 是一个用于 Qt 的商业 DataGrid 组件,它为向最终用户呈现表格数据提供了真正非凡的可能性。组件吸收了用于显示表格的用户界面构造领域的所有现代成就。目前,是 Qt 市场上唯一具有如此令人印象深刻的高级功能和出色性能的网格组件。(查看详情)
QtitanDataGrid使你能够从不同的来源加载各种类型的数据到一个快速、灵活和功能性的可编辑网格中,支持排序、分组、报告、创建带状列、按钮的拖放和大量其他方便的功能。这个数据网格帮助具有Delphi和C++背景的新手和经验丰富的Qt开发者使用同样全面的高级可编辑网格功能,他们已经习惯了在相应的IDE中使用这些功能,而这些功能并不是标准Qt库的一部分。
该示例展示了如何使用添加新行功能。
该示例演示了用户如何向网格输入新行。新行可以位于视图的顶部或底部。
AddingNewRowFeature/AddingNewRowFeature.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 -= FSAddingNewRowFeature/AddingNewRowFeature.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_())AddingNewRowFeature/main.cpp
#include <QApplication> #include "window.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); Window window; window.show(); return app.exec(); }.cpp
Home Tech Support Developer Machines QtitanComponents Documentation Index All Classes Examples And Tutorials AddingNewRowFeature Example #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); }
AddingNewRowFeature/window.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
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn
文章转载自: