Qt的文本编辑器(下)
当前位置:以往代写 > C/C++ 教程 >Qt的文本编辑器(下)
2019-06-13

Qt的文本编辑器(下)

Qt的文本编辑器(下)

副标题#e#

紧接着我们的上一篇博文Qt之文本编辑器(上)我们继承我哦们的文本编辑器之旅。

void MainWindow::createMenus()    
{    
    fileMenu = menuBar()->addMenu(tr("&File"));    
    fileMenu->addAction(newAct);    
    fileMenu->addAction(openAct);    
    fileMenu->addAction(saveAct);    
    fileMenu->addAction(saveAsAct);    
    fileMenu->addSeparator();    
    fileMenu->addAction(exitAct);    
        
    editMenu = menuBar()->addMenu(tr("&Edit"));    
    editMenu->addAction(cutAct);    
    editMenu->addAction(copyAct);    
    editMenu->addAction(pasteAct);    
    menuBar()->addSeparator();    
        
    formMenu = menuBar()->addMenu(tr("&Form"));    
    formMenu->addAction(automaticAct);    
    formMenu->addAction(typefaceAct);    
    menuBar()->addSeparator();    
        
    helpMenu = menuBar()->addMenu(tr("&Help"));    
    helpMenu->addAction(aboutAct);    
    helpMenu->addAction(aboutQtAct);    
}

建设菜单,以及举办机关。

void MainWindow::createToolBars()    
{    
    fileToolBar = addToolBar(tr("File"));    
    fileToolBar->addAction(newAct);    
    fileToolBar->addAction(openAct);    
    fileToolBar->addAction(saveAct);    
    editToolBar = addToolBar(tr("Edit"));    
    editToolBar->addAction(cutAct);    
    editToolBar->addAction(copyAct);    
    editToolBar->addAction(pasteAct);    
}

建设东西Bar,并对其添加Action.

void MainWindow::createStatusBar()    
{    
    statusBar()->showMessage(tr("Ready"));    
}


#p#副标题#e#

QMainWindow::statusBar()返回指向窗口的QStatusBar widget的指针

void MainWindow::readSettings()    
{    
    QSettings settings("Yzs", "Application Example");    
    QPoint pos = settings.value("pos", QPoint(200, 200)).toPoint();    
    QSize size = settings.value("size", QSize(400, 400)).toSize();    
    resize(size);    
    move(pos);    
}    
void MainWindow::writeSettings()    
{    
    QSettings settings("Yzs", "Application Example");    
    settings.setValue("pos", pos());    
    settings.setValue("size", size());    
        
}

操作QSettings类的实现了操作,关于这个类的详细用法可以参考我的另一篇博文,我有详尽的说明。

bool MainWindow::maybeSave()    
{    
    if(textEdit->document()->isModified())    
    {    
        int ret = QMessageBox::warning(this, tr("Application"),    
                                       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::loadFile(const QString &fileName)    
{    
    QFile file(fileName);    
    if(!file.open(QFile::ReadOnly | QFile::Text))    
    {    
        QMessageBox::warning(this, tr("Application"),    
                             tr("Cannot read file %1:\n%2.")    
                             .arg(fileName).arg(file.errorString()));    
        return ;    
    }    
    QTextStream in(&file);    
    QApplication::setOverrideCursor(Qt::WaitCursor);    
    textEdit->setPlainText(in.readAll());    
    QApplication::restoreOverrideCursor();    
    setCurrentFile(fileName);    
    statusBar()->showMessage(tr("File loaded"), 2000);    
}    
bool MainWindow::saveFile(const QString &fileName)    
{    
    QFile file(fileName);    
    if(!file.open(QFile::WriteOnly | QFile::Text))    
    {    
        QMessageBox::warning(this, tr("Application"),    
                             tr("Cannot write file %1:\n%2.")    
                             .arg(fileName).arg(file.errorString()));    
        return false;    
    }    
    QTextStream out(&file);    
    QApplication::setOverrideCursor(Qt::WaitCursor);    
    out<<textEdit->toPlainText();    
    QApplication::restoreOverrideCursor();    
    setCurrentFile(fileName);    
    statusBar()->showMessage(tr("File saved"), 2000);    
    return false;    
}

maybeSave()函数实现判定文件是否已生存,loadFile()函数实现对文件的加载,saveFile()函数实现对文件的生存

void MainWindow::setCurrentFile(const QString &fileName)    
{    
    curFile = fileName;    
    textEdit->document()->setModified(false);    
    setWindowModified(false);    
    QString shownName;    
    if(curFile.isEmpty())    
        shownName = "untitled.txt";    
    else
        shownName = strippedName(curFile);    
    setWindowTitle(tr("%1[*] - %2").arg(shownName).arg(tr("Application")));    
}

#p#副标题#e#

setCurrentFile()函数在一个文件被装载、生存或用户开始编辑新文件时被挪用,

用于复位一些变量的状态。我们更新curFile变量,清0 QTextDocument::modified符号和与之相关的

#p#分页标题#e#

QWidget::windowModified符号,更新窗口的标题以包括新文件名。

QString MainWindow::strippedName(const QString &fullFileName)    
{    
    return QFileInfo(fullFileName).fileName();    
}

strippedName()函数用于修改文件名为较短的绝对路径。

我们的具体函数设计已经完成了,下面就只剩下我们的main函数了

int main(int argc, char *argv[])    
{    
    Q_INIT_RESOURCE(application);    
    QApplication app(argc, argv);    
    MainWindow mainWin;    
    mainWin.show();    
    return app.exec();    
}

OK了,但尚有一点各人不要忘了,我们在措施中利用了资源文件,我们的图片文件都是存储在资源文件中的,我们新建资源文件application.qrc,尔后在application.pro文件中需插手RESOURCES = application.qrc,资源文件的详细内容如下:

<qresource>    
    <file>images/copy.png</file>    
    <file>images/cut.png</file>    
    <file>images/new.png</file>    
    <file>images/open.png</file>    
    <file>images/paste.png</file>    
    <file>images/save.png</file>    
</qresource>    
</RCC>

这样我们就真真正正的实现了一个简朴的文本编辑器了,感受怎么样,一切都是那样的清晰。

本文出自 “驿落薄暮” 博客,请务必保存此出处http://yiluohuanghun.blog.51cto.com/3407300/961015

    关键字:

在线提交作业