ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

【实操干货】如何开始用Qt Widgets编程?(四)

2026/8/5 17:24:24 拓冰建站 浏览量
【实操干货】如何开始用Qt Widgets编程?(四) Qt是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写所有平台无差别运行更提供了几乎所有开发过程中需要用到的工具。如今Qt已被运用于超过70个行业、数千家企业支持数百万设备及应用。在本文中我们通过使用C和Qt Widgets模块实现一个简单的记事本应用程序来学习基本的Qt知识该应用程序是一个小型的文本编辑器允许您创建文本文件、保存、打印或重新打开并在此编辑它还可以设置要使用的字体。在上文中我们为大家介绍了设计用户界面时的Qt Designer设计器使用、Notepad Header文件、Notepad 源文件等本文将继续介绍如何添加用户交互欢迎持续关注我们。DevExpress新旧版本帮助文档下载可进QQ qun获取169725316添加用户交互要向编辑器添加功能首先在工具栏上添加菜单项和按钮。点击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 dont 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(); }QFile 对象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(); }这与保存文件的过程相同唯一的区别是这里需要为要创建的文件输入一个新的文件名。