【实操干货】如何开始用Qt Widgets编程?(四)
Qt 是目前最先进、最完整的跨平台C++开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。
在本文中,我们通过使用C++和Qt Widgets模块实现一个简单的记事本应用程序来学习基本的Qt知识,该应用程序是一个小型的文本编辑器,允许您创建文本文件、保存、打印或重新打开并在此编辑它,还可以设置要使用的字体。
在上文中(点击这里回顾>>),我们为大家介绍了设计用户界面时的Qt Designer(设计器)使用、Notepad Header文件、Notepad 源文件等,本文将继续介绍如何添加用户交互,欢迎持续关注我们。

点击获取Qt Widget组件下载(Q技术交流: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();
}
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();
}
这与保存文件的过程相同,唯一的区别是这里需要为要创建的文件输入一个新的文件名。
相关文章:
【实操干货】如何开始用Qt Widgets编程?(四)
Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。 在本文中࿰…...
解决window安装docker报错问题
第一次打开Docker Desktop后提示错误 试了网上版本都没用,后面发现是电脑没有下载相关虚拟机: 先点击链接下载wsl2,下载后命令行执行:dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /…...
茄子科技面试题
1、RPC的重要组成有哪些? 客户端(Client):发起RPC请求的部分。客户端包含代表远程过程的存根(stub),它提供与本地过程相同的接口。 服务器(Server):接受RPC请…...
postgis数据库导出csv表再导入postgis
1、导出csv表 from settings_Address import * from sqlalchemy import create_engine, MetaData import pandas as pd def create_conn(Postgis_user,Postgis_password,Postgis_host,Postgis_port,dbname_PG):# return create_engine(PostgispyPostgis://{}:{}{}:{}/{}.forma…...
MySQL 特殊字符
文章目录 1.注释符2.字符串符3.反引号4.模式匹配通配符转义符 参考文献 1.注释符 SQL 注释是用来在 SQL 语句中添加对代码的解释说明。SQL 支持两种类型的注释符号。 单行注释:使用两个连续的减号(–)表示。减号后面的内容将被视为注释&…...
Chrome自动升级了,找不到最新版本的webdriver怎么办?
Chrome自动升级了,找不到最新版本的webdriver怎么办? 背景解决办法 背景 我用Selenium开发了Facebook和Linkedin爬虫,有些新需求要调一下,今天启动selenium时有报错,报错如下:selenium.common.exceptions.SessionNotCreatedExce…...
网络编程套接字(3): 简单的TCP网络程序
文章目录 网络编程套接字(3)4. 简单的TCP网络程序4.1 服务端创建(1) 创建套接字(2) 绑定端口(3) 监听(4) 获取新连接(5) 处理读取与写入 4.2 客户端创建(1)连接服务器 4.3 代码编写(1) v1__简单发送消息(2) v2_多进程版本(3) v3_多线程版本(4) v4_线程池版本 网络编程套接字(3)…...
springMVC之拦截器
文章目录 前言一、拦截器的配置二、拦截器的三个抽象方法三、多个拦截器的执行顺序总结 前言 拦截器 一、拦截器的配置 SpringMVC中的拦截器用于拦截控制器方法的执行 SpringMVC中的拦截器需要实现HandlerInterceptor SpringMVC的拦截器必须在SpringMVC的配置文件中进行配置&…...
docker搭建个人网盘和私有仓库Harbor
目录 1、使用mysql:5.7和 owncloud 镜像,构建一个个人网盘 2、安装搭建私有仓库 Harbor 1、使用mysql:5.7和owncloud,构建一个个人网盘 1.拉取mysql:5.6镜像,并且运行mysql容器 [rootnode8 ~]# docker pull mysql:5.7 [rootnode8 ~]# doc…...
智慧排水监测系统,科技助力城市排水治理
城市里,人们每天通过道路通行,人多,路窄,都会拥堵。同样,下雨天,雨水通过雨篦汇集、管道输送,最终排出去,当雨水过大,或者管道过窄,或者管道不通畅࿰…...
部署java程序的服务器cpu过高如何排查和解决
1.top命令找到占用CPU高的Java进程PID 2.根据进程ID找到占用CPU高的线程 ps -mp pid -o THREAD,tid | sort -r ps -mp 124682 -o THREAD,tid | sort -r 3.将指定的线程ID输出为16进制格式 printf “%x\n” tid printf "%x\n" 6384 18f0 4.jstack pid |…...
合宙Air724UG LuatOS-Air LVGL API控件--按钮 (Button)
按钮 (Button) 按钮控件,这个就不用多说了,界面的基础控件之一。 示例代码 – 按键回调函数 event_handler function(obj, event) if event lvgl.EVENT_CLICKED then print(“Clicked\n”) elseif event lvgl.EVENT_VALUE_CHANGED then print(“To…...
new/delete与malloc/free的区别
new/delete与malloc/free的区别 new、delete是C中的操作符,而malloc、free是标准库函数。 new 和 delete 是类型安全的,它们能够根据要分配的对象类型进行内存分配和释放,并调用相应的构造函数和析构函数。而 malloc 和 free 则是无类型的&am…...
QT listWidget 中实现元素的自由拖拽
QListWIdget中拖拽元素移动 setMovement(QListView::Movement::Free);setDragEnabled(true); setDragDropMode(DragDropMode::DragDrop); setDefaultDropAction(Qt::DropAction::MoveAction);...
ChatGPT AIGC 完成二八分析柏拉图的制作案例
我们先让ChatGPT来总结一下二八分析柏拉图的好处与优点 同样ChatGPT 也可以帮我们来实现柏拉图的制作。 效果如下: 这样的按年份进行选择的柏拉图使用前端可视化的技术就可以实现。 如HTML,JS,Echarts等,但是代码可以让ChatGPT来做,生成。 在ChatGPT中给它一个Prompt …...
Python 分析HTTP的可靠性
在这篇文章中,我们将介绍如何使用 Python 来分析代理服务提供商的可靠性。代理服务在许多场景中都非常有用,例如突破地理限制、保护隐私和提高网络安全性。然而,并非所有的代理服务提供商都是可靠的。因此,我们将使用 Python 来测…...
数据库连接报错CannotGetJdbcConnectionException: Failed to obtain JDBC Connection
数据库连接报错CannotGetJdbcConnectionException: Failed to obtain JDBC Connection 报错信息 [Namecom.primeton.esb.online.restaurant.ms.online.mediaService.mediaService.biz][activity nameJDBC调用][activity idinvokePojo9] throw an exception:java.lang.Excepti…...
【Linux系列】vmware虚拟机网络配置详解
非原创 原文地址[1] 首发博客地址[2] 系列文章地址[3] vmware 为我们提供了三种网络工作模式,它们分别是:Bridged(桥接模式)、NAT(网络地址转换模式)、Host-Only(仅主机模式)。 打开…...
AUTOSAR规范与ECU软件开发(实践篇)7.8 MCAL模块配置方法及常用接口函数介绍之Icu的配置
目录 1、前言 2 、Icu模块 (1) Icu General配置 (2) IcuConfigSet配置 (3) IcuConfigSet配置 1、前言 本例程的硬件平台为MPC5744P开发板&...
2023-9-2 Prim算法求最小生成树
题目链接:Prim算法求最小生成树 #include <iostream> #include <cstring> #include <algorithm>using namespace std;const int N 510, INF 0x3f3f3f3f;int n, m; int g[N][N]; int dist[N]; bool st[N];int prim() {memset(dist, 0x3f, size…...
AI 写的鸿蒙 ArkTS 代码能跑?我测了 37 个案例,翻车率 60%
先扔结论:如果你现在把 Claude 或 Cursor 当成 ArkTS 专家来用,大概率会掉坑里。我上周闲得慌,跑了 37 个常见开发场景的测试,结果 AI 生成的代码能直接编译通过的,不到四成。剩下的要么语法错误,要么用了废…...
Halcon实战:告别调参玄学,用dyn_threshold和var_threshold搞定复杂光照下的缺陷检测
Halcon实战:告别调参玄学,用dyn_threshold和var_threshold搞定复杂光照下的缺陷检测 在工业视觉检测中,光照不均和背景纹理干扰是最令人头疼的问题之一。想象一下这样的场景:金属表面反光导致划痕时隐时现,印刷品上的油…...
从零搭建Perplexity增强型新闻监控系统:Python+LangChain+自定义Fact-Check插件(含GitHub可运行代码仓链接)
更多请点击: https://intelliparadigm.com 第一章:Perplexity科技新闻搜索 Perplexity 是一款以实时性、可溯源和语义理解见长的AI驱动搜索工具,专为技术从业者与研究人员优化。其“科技新闻搜索”功能并非传统关键词匹配,而是基…...
智慧树自动刷课插件:3分钟安装的终极学习效率提升指南
智慧树自动刷课插件:3分钟安装的终极学习效率提升指南 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 还在为智慧树平台的冗长视频课程烦恼吗?智…...
HDR 图像的双层结构——元数据生成与 hdrDecompose/hdrCompose 完整解析
文章目录HDR 图到底怎么存的?三个核心操作的关系元数据生成代码详解HDR 分解与合成代码详解HdrMetadataType 四种类型对比像素格式与 HDR 类型对应关系StorageLink 串联四个页面的设计思路踩坑记录写在最后一直以来我以为 HDR 图就是"更亮的图"࿰…...
芜湖装修公司推荐哪家
在芜湖寻找一家可靠的装修公司?作为江城本土的老品牌,安徽百视装饰设计工程有限公司(简称芜湖百视装饰)绝对是您的理想选择。成立于2003年,已有24年完整的设计、工程、管理经历,是芜湖地区值得信赖的装修专…...
基于Fog Project的系统无人值守部署(一)Fog Project安装
安装部署 官网下载安装包进行安装 https://fogproject.org/download.php 安装 以下安装基于Debian 13系统进行部署。 rootdebian:~# ls FOGProject-fogproject-1.5.10.1673-0-g8af159d.tar.gz rootdebian:~# tar -xzvf FOGProject-fogproject-1.5.10.1673-0-g8af159d.tar.…...
Jetson Orin Nano 新手避坑:从零部署YoloV5,我踩过的那些环境配置的‘雷’
Jetson Orin Nano 边缘AI部署实战:YOLOv5环境配置全攻略与避坑指南 1. 硬件准备与系统烧录 Jetson Orin Nano作为NVIDIA新一代边缘计算设备,其强大的AI算力与紧凑体积使其成为计算机视觉项目的理想选择。但在开始YOLOv5部署前,正确的硬件准…...
硬件开发、智能硬件与硬件系统:从概念到产品的完整技术解析
1. 项目概述:从“黑盒子”到“白盒子”的认知跃迁在科技行业摸爬滚打十几年,我见过太多对“硬件”这个词的误解。有人觉得硬件就是电脑、手机这些看得见摸得着的“铁疙瘩”;有人觉得智能硬件就是给传统设备加个Wi-Fi模块;还有人觉…...
从ChatGPT到Llama:主流大模型的分词器(Tokenizer)到底怎么选?实战对比与避坑指南
从ChatGPT到Llama:主流大模型的分词器实战指南 当你在ChatGPT中输入"深度学习"四个字时,系统实际处理的可能是["深","度","学","习"]四个token——这个看似简单的切分过程,直接影响着大模…...
