翻譯|使用教程|編輯:龔雪|2023-08-31 11:03:10.327|閱讀 113 次
概述:本文中是一個基于Qt Widgets的記事本應(yīng)用程序的教程,歡迎大家下載組件一起體驗(yàn)!
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
Qt 是目前最先進(jìn)、最完整的跨平臺C++開發(fā)工具。它不僅完全實(shí)現(xiàn)了一次編寫,所有平臺無差別運(yùn)行,更提供了幾乎所有開發(fā)過程中需要用到的工具。如今,Qt已被運(yùn)用于超過70個行業(yè)、數(shù)千家企業(yè),支持?jǐn)?shù)百萬設(shè)備及應(yīng)用。
在本文中,我們通過使用C++和Qt Widgets模塊實(shí)現(xiàn)一個簡單的記事本應(yīng)用程序來學(xué)習(xí)基本的Qt知識,該應(yīng)用程序是一個小型的文本編輯器,允許您創(chuàng)建文本文件、保存、打印或重新打開并在此編輯它,還可以設(shè)置要使用的字體。
在上文中(點(diǎn)擊這里回顧>>),我們?yōu)榇蠹医榻B了設(shè)計(jì)用戶界面時的Qt Designer(設(shè)計(jì)器)使用、Notepad Header文件、Notepad 源文件等,本文將繼續(xù)介紹如何添加用戶交互,歡迎持續(xù)關(guān)注我們。
Qt技術(shù)交流群:166830288 歡迎一起進(jìn)群討論
要向編輯器添加功能,首先在工具欄上添加菜單項(xiàng)和按鈕。
點(diǎn)擊"Type Here",然后添加New、Open、Save、Save as、Print和Exit,這將在下面的Action Editor中創(chuàng)建5行代碼。要將操作連接到插槽,請右鍵單擊操作并選擇Go To slot > triggered(),然后完成給定插槽的代碼。
如果還想將操作添加到工具欄,我們可以為每個QAction分配一個圖標(biāo),然后將QAction拖到工具欄中。通過在相關(guān)操作的icon屬性中輸入圖標(biāo)名稱來分配圖標(biāo),當(dāng)QAction被拖到工具欄時,單擊圖標(biāo)將啟動關(guān)聯(lián)的槽。
完成方法newDocument():
void Notepad::newDocument() { currentFile.clear(); ui->textEdit->setText(QString()); }
currentFile變量是一個包含當(dāng)前正在編輯文件的全局變量,clear()清除文本緩沖區(qū),currentFile變量定義在notepad.h的私有部分:
private: Ui::Notepad *ui; QString currentFile;
在notepad.ui中,右鍵單擊actionOpen并選擇Go to Slot。
完成open()方法。
void Notepad::open() { QString fileName = QFileDialog::getOpenFileName(this, "Open the file"); if (fileName.isEmpty()) return; QFile file(fileName); currentFile = fileName; if (!file.open(QIODevice::ReadOnly | QFile::Text)) { QMessageBox::warning(this, "Warning", "Cannot open file: " + file.errorString()); return; } setWindowTitle(fileName); QTextStream in(&file); QString text = in.readAll(); ui->textEdit->setText(text); file.close(); }
QFileDialog::getOpenFileName打開一個對話框,您能選擇一個文件。QFile對象myfile有選擇的file_name作為參數(shù),還將選中的文件存儲到全局變量currentFile中,以供稍后使用。我們用文件打開文件,作為只讀文本文件打開。如果無法打開,則發(fā)出警告,并停止程序。
為參數(shù)myfile定義了一個QTextStream流,文件myfile的內(nèi)容被復(fù)制到QString文本中,setText(text)用文本填充編輯器的緩沖區(qū)。
我們以與打開文件相同的方式創(chuàng)建保存文件的方法,即右鍵單擊actionSave并選擇Go to Slot。
void Notepad::save() { QString fileName; // If we don't have a filename from before, get one. if (currentFile.isEmpty()) { fileName = QFileDialog::getSaveFileName(this, "Save"); if (fileName.isEmpty()) return; currentFile = fileName; } else { fileName = currentFile; } QFile file(fileName); if (!file.open(QIODevice::WriteOnly | QFile::Text)) { QMessageBox::warning(this, "Warning", "Cannot save file: " + file.errorString()); return; } setWindowTitle(fileName); QTextStream out(&file); QString text = ui->textEdit->toPlainText(); out << text; file.close(); }
對象myfile鏈接到全局變量current_file,該變量包含正在處理的文件。如果無法打開myfile,則會發(fā)出錯誤消息并停止該方法。我們創(chuàng)建一個QTextStream輸出,編輯器緩沖區(qū)的內(nèi)容被轉(zhuǎn)換為純文本,然后寫入輸出。
void Notepad::saveAs() { QString fileName = QFileDialog::getSaveFileName(this, "Save as"); if (fileName.isEmpty()) return; QFile file(fileName); if (!file.open(QFile::WriteOnly | QFile::Text)) { QMessageBox::warning(this, "Warning", "Cannot save file: " + file.errorString()); return; } currentFile = fileName; setWindowTitle(fileName); QTextStream out(&file); QString text = ui->textEdit->toPlainText(); out << text; file.close(); }
這與保存文件的過程相同,唯一的區(qū)別是這里需要為要創(chuàng)建的文件輸入一個新的文件名。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:慧都網(wǎng)