⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainwindow.cpp

📁 这个是qt3c++编程书(齐亮翻译),里面3,4章代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
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 &copy; 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 + -