QT實戰(zhàn)之打開最近文檔功能的實現(xiàn)_第1頁
QT實戰(zhàn)之打開最近文檔功能的實現(xiàn)_第2頁
QT實戰(zhàn)之打開最近文檔功能的實現(xiàn)_第3頁
QT實戰(zhàn)之打開最近文檔功能的實現(xiàn)_第4頁
QT實戰(zhàn)之打開最近文檔功能的實現(xiàn)_第5頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第QT實戰(zhàn)之打開最近文檔功能的實現(xiàn)目錄一、項目介紹二、項目基本配置三、UI界面設置四、主程序實現(xiàn)4.1mainwindow.h頭文件4.2mainwindow.cpp源文件4.3main.cpp五、效果演示

一、項目介紹

本文介紹利用Qt實現(xiàn)打開最近文檔功能,并實現(xiàn)基本的新建、打開、保存、退出、幫助等功能。

二、項目基本配置

新建一個Qt案例,項目名稱為RecentTest,基類選擇QMainWindow,取消選中創(chuàng)建UI界面復選框,完成項目創(chuàng)建。

三、UI界面設置

無UI界面

四、主程序實現(xiàn)

4.1mainwindow.h頭文件

頭文件中需要聲明若干槽函數(shù)和相應函數(shù):

privateslots:

voidnewFile();

voidopen();

voidsave();

voidsaveAs();

voidopenRecentFile();

voidabout();

private:

voidcreateActions();

voidcreateMenus();

voidloadFile(constQStringfileName);

voidsaveFile(constQStringfileName);

voidsetCurrentFile(constQStringfileName);

voidupdateRecentFileActions();

QStringstrippedName(constQStringfullFileName);

QStringcurFile;

QTextEdit*textEdit;

QMenu*fileMenu;

QMenu*recentFilesMenu;

QMenu*helpMenu;

QAction*newAct;

QAction*openAct;

QAction*saveAct;

QAction*saveAsAct;

QAction*exitAct;

QAction*aboutAct;

QAction*aboutQtAct;

QAction*separatorAct;

//設置最大最近文件為5個

enum{MaxRecentFiles=5};

QAction*recentFileActs[MaxRecentFiles];

4.2mainwindow.cpp源文件

需要在構造函數(shù)中添加如下代碼:

setAttribute(Qt::WA_DeleteOnClose);//當關閉時刪除該組件

textEdit=newQTextEdit;//新建TextEdit

setCentralWidget(textEdit);//設為中心部件

createActions();

createMenus();

(void)statusBar();//增加狀態(tài)欄

setWindowFilePath(QString());

resize(400,300);//調(diào)整尺寸大小

構造函數(shù)中的createActions()函數(shù)用于創(chuàng)建相應的行為,創(chuàng)建了New、Open、Save、SaveAs、最近5個文件、Exit、About和AboutQt這幾個Action,并設置相應的快捷鍵、狀態(tài)欄和連接槽函數(shù):

//創(chuàng)建action

voidMainWindow::createActions()

newAct=newQAction(tr("New"),this);//new

newAct-setShortcuts(QKeySequence::New);//設置快捷鍵

newAct-setStatusTip(tr("Createanewfile"));//設置狀態(tài)欄

connect(newAct,SIGNAL(triggered()),this,SLOT(newFile()));

openAct=newQAction(tr("Open..."),this);//open

openAct-setShortcuts(QKeySequence::Open);//設置快捷鍵

openAct-setStatusTip(tr("Openanexistingfile"));//設置狀態(tài)欄

connect(openAct,SIGNAL(triggered()),this,SLOT(open()));

saveAct=newQAction(tr("Save"),this);//save

saveAct-setShortcuts(QKeySequence::Save);//設置快捷鍵

saveAct-setStatusTip(tr("Savethedocumenttodisk"));//設置狀態(tài)欄

connect(saveAct,SIGNAL(triggered()),this,SLOT(save()));

saveAsAct=newQAction(tr("SaveAs..."),this);//saveas

saveAsAct-setShortcuts(QKeySequence::SaveAs);//設置快捷鍵

saveAsAct-setStatusTip(tr("Savethedocumentunderanewname"));//設置狀態(tài)欄

connect(saveAsAct,SIGNAL(triggered()),this,SLOT(saveAs()));

//5個Action(打開最近五個文件)

for(inti=0;iMaxRecentFiles;++i){

recentFileActs[i]=newQAction(this);

recentFileActs[i]-setVisible(false);

connect(recentFileActs[i],SIGNAL(triggered()),

this,SLOT(openRecentFile()));

exitAct=newQAction(tr("Exit"),this);//exit

exitAct-setShortcuts(QKeySequence::Quit);//設置快捷鍵

exitAct-setStatusTip(tr("Exittheapplication"));//設置狀態(tài)欄

connect(exitAct,SIGNAL(triggered()),qApp,SLOT(closeAllWindows()));

aboutAct=newQAction(tr("About"),this);//about

aboutAct-setStatusTip(tr("Showtheapplication'sAboutbox"));//設置狀態(tài)欄

connect(aboutAct,SIGNAL(triggered()),this,SLOT(about()));

aboutQtAct=newQAction(tr("AboutQt"),this);//AboutQt

aboutQtAct-setStatusTip(tr("ShowtheQtlibrary'sAboutbox"));//設置狀態(tài)欄

connect(aboutQtAct,SIGNAL(triggered()),qApp,SLOT(aboutQt()));

newFile()槽函數(shù)用于新建一個相同的窗口:

//新建界面并顯示

voidMainWindow::newFile()

MainWindow*other=newMainWindow;

other-show();

open()槽函數(shù)用于打開并加載文檔:

//打開文件

voidMainWindow::open()

QStringfileName=QFileDialog::getOpenFileName(this);

if(!fileName.isEmpty())

loadFile(fileName);

loadFile()函數(shù):

//加載文件

voidMainWindow::loadFile(constQStringfileName)

QFilefile(fileName);

if(!file.open(QFile::ReadOnly|QFile::Text)){

QMessageBox::warning(this,tr("RecentFiles"),

tr("Cannotreadfile%1:\n%2.")

.arg(fileName)

.arg(file.errorString()));

return;

QTextStreamin(file);

QGuiApplication::setOverrideCursor(Qt::WaitCursor);//等待光標

textEdit-setPlainText(in.readAll());//設置文本

QGuiApplication::restoreOverrideCursor();//撤銷最后一個光標

setCurrentFile(fileName);

statusBar()-showMessage(tr("Fileloaded"),2000);

setCurrentFile()函數(shù)用于設置當前文件關聯(lián)路徑:

//設置當前文件

voidMainWindow::setCurrentFile(constQStringfileName)

curFile=fileName;

setWindowFilePath(curFile);//設置關聯(lián)文件路徑

QSettingssettings;

QStringListfiles=settings.value("recentFileList").toStringList();

files.removeAll(fileName);//移除所有文件名

files.prepend(fileName);//在開頭附加子串

//如果尺寸超過最大尺寸,則刪除最后一項

while(files.size()MaxRecentFiles)

files.removeLast();

settings.setValue("recentFileList",files);//設置鍵值對

foreach(QWidget*widget,QApplication::topLevelWidgets()){

MainWindow*mainWin=qobject_castMainWindow*(widget);

if(mainWin)

mainWin-updateRecentFileActions();//更新最近文件

updateRecentFileActions()函數(shù)更新最近文件信息

voidMainWindow::updateRecentFileActions()

QSettingssettings;

QStringListfiles=settings.value("recentFileList").toStringList();//讀取recentFileList的值

intnumRecentFiles=qMin(files.size(),(int)MaxRecentFiles);//計算兩者的最小值

for(inti=0;inumRecentFiles;++i){

QStringtext=tr("%1%2").arg(i+1).arg(strippedName(files[i]));//序號文件名

recentFileActs[i]-setText(text);//設置文本

recentFileActs[i]-setData(files[i]);//設置數(shù)據(jù)

recentFileActs[i]-setVisible(true);//設置可見性

for(intj=numRecentFiles;jMaxRecentFiles;++j)

recentFileActs[j]-setVisible(false);//其他數(shù)量設置為不可見

separatorAct-setVisible(numRecentFiles//如果有最近未見則設置分隔符為可見

strippedName()函數(shù)用于獲取相應的文件名:

//獲取文件名

QStringMainWindow::strippedName(constQStringfullFileName)

returnQFileInfo(fullFileName).fileName();//返回文件名

save()函數(shù)和saveAs()槽函數(shù)用于將文檔進行保存:

//保存文件

voidMainWindow::save()

if(curFile.isEmpty())

saveAs();//如果curFile為空,則設置保存為

else

saveFile(curFile);

//保存為

voidMainWindow::saveAs()

QStringfileName=QFileDialog::getSaveFileName(this);

if(fileName.isEmpty())

return;

saveFile(fileName);

saveFile()函數(shù):

voidMainWindow::saveFile(constQStringfileName)

QFilefile(fileName);

if(!file.open(QFile::WriteOnly|QFile::Text)){

QMessageBox::warning(this,tr("RecentFiles"),

tr("Cannotwritefile%1:\n%2.")

.arg(fileName)

.arg(file.errorString()));

return;

QTextStreamout(file);

QGuiApplication::setOverrideCursor(Qt::WaitCursor);//等待光標

outtextEdit-toPlainText();//將文本寫入

QGuiApplication::restoreOverrideCursor();//撤銷最后一個光標

setCurrentFile(fileName);

statusBar()-showMessage(tr("Filesaved"),2000);//狀態(tài)欄顯示2000ms

openRecentFile()槽函數(shù)用于打開最近的文件:

//打開最近文件

voidMainWindow::openRecentFile()

QAction*action=qobject_castQAction*(sender());

if(action)

loadFile(action-data().toString());

about()槽函數(shù)顯示相關信息:

//about

voidMainWindow::about()

QMessageBox::about(this,tr("AboutRecentFiles"),

tr("ThebRecentFiles/bexampledemonstrateshowtoprovidea"

"recentlyusedfilemenuinaQtapplication."));

構造函數(shù)中的createMenus()函數(shù)用于創(chuàng)建相應的菜單欄:

voidMainWindow::createMenus()

fileMenu=menuBar()-addMenu(tr("File"));

fileMenu-addAction(newAct);

fileMenu-addAction(openAct);

fileMenu-addAction(saveAct);

fileMenu-addAction(saveAsAct);

separatorAct=fileMenu-addSeparator();//增加分隔符

for(inti=0;iMaxRecentFiles;++i)

fileMenu-addAction(recentFileActs[i]);

fileMenu-addSeparator();//增加分隔符

fileMenu-addAction(exitAct);

updateRecentFileActions();

menuBar()-addSeparator();

helpMenu=menuBar()-addMenu(tr("Help"));

helpMenu

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論