翻譯|使用教程|編輯:龔雪|2023-08-31 11:03:10.327|閱讀 113 次
概述:本文中是一個基于Qt Widgets的記事本應用程序的教程,歡迎大家下載組件一起體驗!
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
Qt 是目前最先進、最完整的跨平臺C++開發工具。它不僅完全實現了一次編寫,所有平臺無差別運行,更提供了幾乎所有開發過程中需要用到的工具。如今,Qt已被運用于超過70個行業、數千家企業,支持數百萬設備及應用。
在本文中,我們通過使用C++和Qt Widgets模塊實現一個簡單的記事本應用程序來學習基本的Qt知識,該應用程序是一個小型的文本編輯器,允許您創建文本文件、保存、打印或重新打開并在此編輯它,還可以設置要使用的字體。
在上文中(點擊這里回顧>>),我們為大家介紹了設計用戶界面時的Qt Designer(設計器)使用、Notepad Header文件、Notepad 源文件等,本文將繼續介紹如何添加用戶交互,歡迎持續關注我們。
Qt技術交流群:166830288 歡迎一起進群討論
要向編輯器添加功能,首先在工具欄上添加菜單項和按鈕。
點擊"Type Here",然后添加New、Open、Save、Save as、Print和Exit,這將在下面的Action Editor中創建5行代碼。要將操作連接到插槽,請右鍵單擊操作并選擇Go To slot > triggered(),然后完成給定插槽的代碼。
如果還想將操作添加到工具欄,我們可以為每個QAction分配一個圖標,然后將QAction拖到工具欄中。通過在相關操作的icon屬性中輸入圖標名稱來分配圖標,當QAction被拖到工具欄時,單擊圖標將啟動關聯的槽。
完成方法newDocument():
void Notepad::newDocument() { currentFile.clear(); ui->textEdit->setText(QString()); }
currentFile變量是一個包含當前正在編輯文件的全局變量,clear()清除文本緩沖區,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作為參數,還將選中的文件存儲到全局變量currentFile中,以供稍后使用。我們用文件打開文件,作為只讀文本文件打開。如果無法打開,則發出警告,并停止程序。
為參數myfile定義了一個QTextStream流,文件myfile的內容被復制到QString文本中,setText(text)用文本填充編輯器的緩沖區。
我們以與打開文件相同的方式創建保存文件的方法,即右鍵單擊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,則會發出錯誤消息并停止該方法。我們創建一個QTextStream輸出,編輯器緩沖區的內容被轉換為純文本,然后寫入輸出。
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(); }
這與保存文件的過程相同,唯一的區別是這里需要為要創建的文件輸入一個新的文件名。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都網