📄 mainwindow.cpp
字号:
bool MainWindow::save(){ if (curFile.isEmpty()) { return saveAs(); } else { saveFile(curFile); return true; }}void MainWindow::saveFile(const QString &fileName){ if (spreadsheet->writeFile(fileName)) { setCurrentFile(fileName); statusBar()->message(tr("File saved"), 2000); } else { statusBar()->message(tr("Saving canceled"), 2000); }}bool MainWindow::saveAs(){ QString fileName = QFileDialog::getSaveFileName(".", fileFilters, this); if (fileName.isEmpty()) return false; if (QFile::exists(fileName)) { int ret = QMessageBox::warning(this, tr("Spreadsheet"), tr("File %1 already exists.\n" "Do you want to overwrite it?") .arg(QDir::convertSeparators(fileName)), QMessageBox::Yes | QMessageBox::Default, QMessageBox::No | QMessageBox::Escape); if (ret == QMessageBox::No) return true; } if (!fileName.isEmpty()) saveFile(fileName); return true;}void MainWindow::closeEvent(QCloseEvent *event){ if (maybeSave()) { writeSettings(); event->accept(); } else { event->ignore(); }}bool MainWindow::maybeSave(){ if (modified) { int ret = QMessageBox::warning(this, tr("Spreadsheet"), tr("The document has been modified.\n" "Do you want to save your changes?"), QMessageBox::Yes | QMessageBox::Default, QMessageBox::No, QMessageBox::Cancel | QMessageBox::Escape); if (ret == QMessageBox::Yes) return save(); else if (ret == QMessageBox::Cancel) return false; } return true;}void MainWindow::setCurrentFile(const QString &fileName){ curFile = fileName; modLabel->clear(); modified = false; if (curFile.isEmpty()) { setCaption(tr("Spreadsheet")); } else { setCaption(tr("%1 - %2").arg(strippedName(curFile)) .arg(tr("Spreadsheet"))); recentFiles.remove(curFile); recentFiles.push_front(curFile); updateRecentFileItems(); }}QString MainWindow::strippedName(const QString &fullFileName){ return QFileInfo(fullFileName).fileName();}void MainWindow::updateRecentFileItems(){ while ((int)recentFiles.size() > MaxRecentFiles) recentFiles.pop_back(); for (int i = 0; i < (int)recentFiles.size(); ++i) { QString text = tr("&%1 %2") .arg(i + 1) .arg(strippedName(recentFiles[i])); if (recentFileIds[i] == -1) { if (i == 0) fileMenu->insertSeparator(fileMenu->count() - 2); recentFileIds[i] = fileMenu->insertItem(text, this, SLOT(openRecentFile(int)), 0, -1, fileMenu->count() - 2); fileMenu->setItemParameter(recentFileIds[i], i); } else { fileMenu->changeItem(recentFileIds[i], text); } }}void MainWindow::openRecentFile(int param){ if (maybeSave()) loadFile(recentFiles[param]);}void MainWindow::createStatusBar(){ locationLabel = new QLabel(" W999 ", this); locationLabel->setAlignment(AlignHCenter); locationLabel->setMinimumSize(locationLabel->sizeHint()); formulaLabel = new QLabel(this); modLabel = new QLabel(tr(" MOD "), this); modLabel->setAlignment(AlignHCenter); modLabel->setMinimumSize(modLabel->sizeHint()); modLabel->clear(); statusBar()->addWidget(locationLabel); statusBar()->addWidget(formulaLabel, 1); statusBar()->addWidget(modLabel); connect(spreadsheet, SIGNAL(currentChanged(int, int)), this, SLOT(updateCellIndicators())); connect(spreadsheet, SIGNAL(modified()), this, SLOT(spreadsheetModified())); updateCellIndicators();}void MainWindow::updateCellIndicators(){ locationLabel->setText(spreadsheet->currentLocation()); formulaLabel->setText(" " + spreadsheet->currentFormula());}void MainWindow::spreadsheetModified(){ modLabel->setText(tr("MOD")); modified = true; updateCellIndicators();}void MainWindow::find(){ if (!findDialog) { findDialog = new FindDialog(this); connect(findDialog, SIGNAL(findNext(const QString &, bool)), spreadsheet, SLOT(findNext(const QString &, bool))); connect(findDialog, SIGNAL(findPrev(const QString &, bool)), spreadsheet, SLOT(findPrev(const QString &, bool))); } findDialog->show(); findDialog->raise(); findDialog->setActiveWindow();}void MainWindow::goToCell(){ GoToCellDialog dialog(this); if (dialog.exec()) { QString str = dialog.lineEdit->text(); spreadsheet->setCurrentCell(str.mid(1).toInt() - 1, str[0].upper().unicode() - 'A'); }}void MainWindow::sort(){ SortDialog dialog(this); QTableSelection sel = spreadsheet->selection(); dialog.setColumnRange('A' + sel.leftCol(), 'A' + sel.rightCol()); if (dialog.exec()) { SpreadsheetCompare compare; compare.keys[0] = dialog.primaryColumnCombo->currentItem(); compare.keys[1] = dialog.secondaryColumnCombo->currentItem() - 1; compare.keys[2] = dialog.tertiaryColumnCombo->currentItem() - 1; compare.ascending[0] = (dialog.primaryOrderCombo->currentItem() == 0); compare.ascending[1] = (dialog.secondaryOrderCombo->currentItem() == 0); compare.ascending[2] = (dialog.tertiaryOrderCombo->currentItem() == 0); spreadsheet->sort(compare); }}void MainWindow::about(){ QMessageBox::about(this, tr("About Spreadsheet"), tr("<h2>Spreadsheet 1.0</h2>" "<p>Copyright © 2003 Software Inc." "<p>Spreadsheet is a small application that " "demonstrates <b>QAction</b>, <b>QMainWindow</b>, " "<b>QMenuBar</b>, <b>QStatusBar</b>, " "<b>QToolBar</b>, and many other Qt classes."));}void MainWindow::writeSettings(){ QSettings settings; settings.setPath("software-inc.com", "Spreadsheet"); settings.beginGroup("/Spreadsheet"); settings.writeEntry("/geometry/x", x()); settings.writeEntry("/geometry/y", y()); settings.writeEntry("/geometry/width", width()); settings.writeEntry("/geometry/height", height()); settings.writeEntry("/recentFiles", recentFiles); settings.writeEntry("/showGrid", showGridAct->isOn()); settings.writeEntry("/autoRecalc", showGridAct->isOn()); settings.endGroup();}void MainWindow::readSettings(){ QSettings settings; settings.setPath("software-inc.com", "Spreadsheet"); settings.beginGroup("/Spreadsheet"); int x = settings.readNumEntry("/geometry/x", 200); int y = settings.readNumEntry("/geometry/y", 200); int w = settings.readNumEntry("/geometry/width", 400); int h = settings.readNumEntry("/geometry/height", 400); move(x, y); resize(w, h); recentFiles = settings.readListEntry("/recentFiles"); updateRecentFileItems(); showGridAct->setOn( settings.readBoolEntry("/showGrid", true)); autoRecalcAct->setOn( settings.readBoolEntry("/autoRecalc", true)); settings.endGroup();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -