当前位置:首页 >> 编程开发 >> Visual C++ >> 内容

Qt的文本编辑器(下)

时间:2013/5/27 作者:平凡之路 来源:xuhantao.com 浏览:

紧接着我们的上一篇博文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"));    
}

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")));    
}

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

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

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

相关文章
  • 没有相关文章
  • 徐汉涛(www.xuhantao.com) © 2024 版权所有 All Rights Reserved.
  • 部分内容来自网络,如有侵权请联系站长尽快处理 站长QQ:965898558(广告及站内业务受理) 网站备案号:蒙ICP备15000590号-1