版權說明:本文檔由用戶提供并上傳,收益歸屬內(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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030建筑節(jié)能改造領域政策補貼設計施工標準制定研究分析報告
- 2026年云南省農(nóng)業(yè)科學院農(nóng)產(chǎn)品加工研究所科研助理(第七批)招聘備考題庫完整參考答案詳解
- 2025-2030建筑建材玻璃纖維行業(yè)市場供需分析及投資評估規(guī)劃分析研究報告
- 2025年陽江市婦幼保健院急需人才招聘備考題庫帶答案詳解
- 2026年臨潁縣事業(yè)單位人才引進備考題庫及1套完整答案詳解
- 2026年凌源市礦泉之花開發(fā)有限公司派遣人員招聘備考題庫及答案詳解1套
- 2026年中國檢驗認證集團廣東有限公司湛江分公司招聘備考題庫參考答案詳解
- 2026年行政工作年終總結范文(2篇)
- 2026年山西大專任教師招聘116人備考題庫及一套答案詳解
- 2026年中山市三角鎮(zhèn)水務事務中心公開招聘水閘、泵站管理人員備考題庫及答案詳解參考
- 2026秋招:澳森特鋼集團試題及答案
- 哲學史重要名詞解析大全
- 2026年寧夏黃河農(nóng)村商業(yè)銀行科技人員社會招聘備考題庫及答案詳解(易錯題)
- DB37-T4975-2025分布式光伏直采直控技術規(guī)范
- 脫硫廢水零排放項目施工方案
- 2026年海南衛(wèi)生健康職業(yè)學院單招綜合素質考試題庫參考答案詳解
- 急性心梗合并急性心衰護理
- 肺原位腺癌病理課件講解
- 傳承三線精神、砥礪奮進前行課件
- 消防設施維保服務方案投標文件(技術方案)
- 堵漏施工方案報價
評論
0/150
提交評論