程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> Qt的文本編輯器(下)

Qt的文本編輯器(下)

編輯:關於C++

緊接著我們的上一篇博文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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved