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