QT使用说明
QT环境准备
推荐Ubuntu平台上使用,配置简单,坑少。
Ubuntu 20.04
安装
sudo apt-get install qt5-default -y
sudo apt-get install qtcreator -y
sudo apt-get install -y libclang-common-8-dev
启动
qtcreator
HelloWorld
- 打开 Qt Creator。
- 选择 “New Project”。
- 选择 “Application” > “Qt Widgets Application”。
- 输入项目名称和位置,然后点击 “Next”。
- 选择合适的构建工具(例如, 默认的 Qt 版本),然后点击 “Next”。
- 点击 “Finish” 完成项目创建。
- 修改代码,mainwindow.cpp
- 选择菜单中的 “Build” > “Build Project” 来构建项目。
- 然后选择 “Run” > “Run Project” 来运行程序。
- 当你运行程序时,会看到一个窗口,窗口中央显示 “Hello, World!” 的文本。
文件结构
dd@dd-Virtual-Machine:~/work/workspace/helloworld$ tree
.
├── helloworld.pro
├── helloworld.pro.user
├── main.cpp
├── mainwindow.cpp
├── mainwindow.h
└── mainwindow.ui0 directories, 6 files
-
helloworld.pro:
- 这是 Qt 项目的项目文件,使用 Qt 的 qmake 工具进行构建。它包含了项目的配置信息,例如:
- 项目名称
- 需要的 Qt 模块(如
core
,gui
,widgets
等) - 源文件和头文件的列表
- 资源文件的路径
- 其他编译选项
- 该文件是用纯文本格式编写的,通常可以用任何文本编辑器打开和编辑。
示例内容:
TEMPLATE = app TARGET = helloworld QT += widgetsSOURCES += main.cpp \mainwindow.cppHEADERS += mainwindow.hFORMS += mainwindow.ui
- 这是 Qt 项目的项目文件,使用 Qt 的 qmake 工具进行构建。它包含了项目的配置信息,例如:
-
helloworld.pro.user:
- 这是 Qt Creator 自动生成的用户配置文件,包含了用户的本地设置,如打开的文件、窗口位置等。通常不需要手动编辑或关注这个文件,它的内容是特定于用户的。
-
main.cpp:
- 这是应用程序的入口点,包含
main()
函数。在此文件中,通常会创建QApplication
对象和主窗口,并启动事件循环。
示例内容:
#include <QApplication> #include "mainwindow.h"int main(int argc, char *argv[]) {QApplication a(argc, argv);MainWindow w;w.show();return a.exec(); }
- 这是应用程序的入口点,包含
-
mainwindow.cpp:
- 这个文件包含
MainWindow
类的实现代码。它通常会包括构造函数、析构函数以及其他槽函数的实现。
示例内容:
#include "mainwindow.h" #include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow) {ui->setupUi(this); }MainWindow::~MainWindow() {delete ui; }
- 这个文件包含
-
mainwindow.h:
- 这是
MainWindow
类的头文件,定义了类的接口,包括成员变量、构造函数、析构函数以及槽函数的声明。
示例内容:
#ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow>namespace Ui { class MainWindow; }class MainWindow : public QMainWindow {Q_OBJECTpublic:explicit MainWindow(QWidget *parent = nullptr);~MainWindow();private:Ui::MainWindow *ui; };#endif // MAINWINDOW_H
- 这是
-
mainwindow.ui:
- 这是 Qt Designer 生成的用户界面文件,采用 XML 格式,定义了应用程序的图形界面。你可以使用 Qt Designer 来可视化地创建和编辑这个文件。
- 这个文件描述了窗口中的控件(如按钮、标签、文本框等)及其属性。
示例内容(部分):
<ui version="4.0"><class>MainWindow</class><widget class="QMainWindow" name="MainWindow"><widget class="QWidget" name="centralWidget"><layout class="QVBoxLayout" name="verticalLayout"><item><widget class="QLabel" name="label"><property name="text"><string>Hello, World!</string></property></widget></item></layout></widget></widget> </ui>
快捷键
格式化代码:Ctrl+A:全选代码,Ctrl+i:格式化选中内容,Ctrl+s:保存文件,清除仅空格行
示例工程
helloworld.zip
Windows
安装
qt-unified-windows-x64-online.exe --mirror https://mirrors.ustc.edu.cn/qtproject
QT基础知识
在阅读WT智能柜QT APP过程中,收集APP中使用的QT知识,汇总到本文档内。
qApp
的含义
qApp
是一个全局指针,指向当前的应用程序对象。它是 QApplication
或 QGuiApplication
的一个实例。通过 qApp
,您可以访问应用程序的全局状态和功能。
processEvents()
的功能
processEvents()
方法的主要作用是处理事件队列中的所有待处理事件。这包括:
- 用户输入(例如,鼠标点击、键盘输入等)
- 定时器事件
- 绘图事件
- 系统事件
当您调用 qApp->processEvents();
时,Qt 会检查事件队列,如果有待处理的事件,它会执行这些事件的处理。这可以帮助保持应用程序的响应性。
使用场景,processEvents()
通常用于以下场景:
- 长时间运行的操作: 在执行耗时的操作(例如,文件处理或网络请求)时,应用程序可能会变得无响应。通过在长时间运行的操作中定期调用
processEvents()
,可以让应用程序保持响应,处理用户输入和更新界面。 - 进度更新: 在长时间操作的循环中,您可能希望更新进度条或其他 UI 元素。通过调用
processEvents()
,可以确保这些更新能够立即反映在用户界面上。
QObject
和父子关系
QObject
是 Qt 框架中的一个核心类,提供了对象的基本功能,包括信号和槽机制、事件处理等。- 在 Qt 中,父子关系用于管理对象的生命周期。当一个对象(子对象)的父对象被销毁时,所有其子对象也会被自动销毁。通过设置
parent
,可以确保内存管理的方便性和安全性。
示例:
HomeWgt::HomeWgt(QWidget *parent) :QWidget(parent),ui(new Ui::HomeWgt)
{bMange= new boxmange(this);sConfig= new SysConfig(this);
}
QTimer
的用法
QTimer
是 Qt 中非常实用的类,用于处理定时任务。通过调用 start()
方法,您可以启动或重新启动定时器,让它在指定的时间间隔内定期发射 timeout()
信号,并执行相应的槽函数。使用 QTimer
可以帮助您轻松管理时间相关的任务,保持应用程序的响应性。
1. QTimer 的基本使用方式
要使用 QTimer
,您通常需要执行以下步骤:
- 创建一个
QTimer
对象。 - 连接定时器的
timeout()
信号到一个槽(slot)函数。 - 调用
start()
方法来启动定时器。
示例代码
下面是一个简单的示例,展示了如何使用 QTimer
:
cpp#include <QApplication>
#include <QWidget>
#include <QTimer>
#include <QLabel>class MyWidget : public QWidget {Q_OBJECTpublic:MyWidget() {label = new QLabel("0", this);label->setAlignment(Qt::AlignCenter);setFixedSize(200, 100);timer = new QTimer(this);connect(timer, &QTimer::timeout, this, &MyWidget::updateLabel);timer->start(1000); // 每1000毫秒(1秒)触发一次timeout信号}private slots:void updateLabel() {count++;label->setText(QString::number(count));}private:QTimer *timer;QLabel *label;int count = 0;
};int main(int argc, char *argv[]) {QApplication app(argc, argv);MyWidget w;w.show();return app.exec();
}#include "main.moc" // 需要包含这个,以支持信号和槽的实现
2. start() 方法的作用
- 启动定时器:
start(int msec)
方法用于启动定时器,msec
参数指定了定时器的时间间隔(以毫秒为单位)。当定时器启动后,timeout()
信号将每隔指定的时间间隔发射一次。 - 重新启动定时器: 如果定时器已经在运行,调用
start()
方法会重新启动定时器,重置计时器的时间间隔。也就是说,定时器会在新的时间间隔开始计时。 - 定时器的精度:
QTimer
的精度通常是毫秒级,但具体的精度可能会受到操作系统和系统负载的影响。
3. 其他相关方法
- stop():
stop()
方法用于停止定时器。如果您希望在某个条件下停止定时器,可以调用此方法。 - isActive():
isActive()
方法可以检查定时器是否正在运行。如果定时器正在运行,返回true
;否则返回false
。
相关文章:
QT使用说明
QT环境准备 推荐Ubuntu平台上使用,配置简单,坑少。 Ubuntu 20.04 安装 sudo apt-get install qt5-default -y sudo apt-get install qtcreator -y sudo apt-get install -y libclang-common-8-dev启动 qtcreatorHelloWorld 打开 Qt Creator。选择 …...

数据结构:递归(Recursion)
目录 示例1:先打印,再递归 示例2:先递归,再打印 递归的两个阶段 递归是如何使用栈内存 复杂度分析 递归中的静态变量 内存结构图解 递归:函数调用自己 必须有判断条件来使递归继续或停止 我们现在通过这两个示…...

Cesium快速入门到精通系列教程一:打造第一个Cesium应用
一、打造第一个Cesium应用 1、官方渠道下载Cesium(可选择历史版本) GitHub Releases页面:https://github.com/CesiumGS/cesium/releases 访问 Cesium GitHub Releases,此处列出了所有正式发布的版本。 通过标签&#…...

力扣题解106:从中序与后序遍历序列构造二叉树
一、题目内容 题目要求根据二叉树的中序遍历序列和后序遍历序列来重建二叉树。具体来说,我们需要利用中序遍历序列和后序遍历序列的特点,通过递归的方法逐步构建出完整的二叉树。 中序遍历序列的特点是:左子树 -> 根节点 -> 右子树。后…...
Vue传参Props还是Pinia
Pinia 适用场景 全局状态管理 多个不相关组件需要共享数据需要跨页面/路由共享状态 复杂状态逻辑 包含多个相互关联的状态有复杂的状态修改逻辑 持久化需求 需要将状态保存到localStorage/sessionStorage页面刷新后需要恢复状态(恢复最后一次修改的状态࿰…...

学习STC51单片机25(芯片为STC89C52RCRC)
每日一言 生活就像弹簧,你弱它就强,你强它就弱,别轻易认输。 ESP8266作为路由器模式(AP模式)也就是在局域网内可以有服务器的作用 那么我们需要将pc作为设备进行连接ESP的发射出来的WIFE 叫做这个AI啥的 也有可能叫做…...

宁夏农业科技:创新引领,赋能现代农业新篇章
在广袤的宁夏大地上,农业科技如同一股强劲的春风,吹拂着每一寸土地,为宁夏的农业发展注入了新的活力与希望。近年来,宁夏农业科技以其独特的创新力和实践力,不断推动着现代农业的转型升级,让这片古老的土地…...

Accelerate 2025北亚巡展正式启航!AI智御全球·引领安全新时代
近日,网络安全行业年度盛会Accelerate 2025北亚巡展正式在深圳启航!智库专家、产业领袖及Fortinet高管、产品技术团队和300余位行业客户齐聚一堂,围绕“AI智御全球引领安全新时代”主题,共同探讨AI时代网络安全新范式。大会聚焦三…...

005学生心理咨询评估系统技术解析:搭建科学心理评估平台
学生心理咨询评估系统技术解析:搭建科学心理评估平台 在心理健康教育日益受重视的当下,学生心理咨询评估系统成为了解学生心理状态的重要工具。该系统涵盖试卷管理、试题管理等核心模块,面向管理员和用户两类角色,通过前台展示与…...
azure devops 系列 - 常用的task
任务在管道中执行操作。例如,任务可以构建应用、与 Azure 资源交互、安装工具或运行测试。任务是定义管道中自动化的构建基块。 运行作业时,所有任务都会按顺序依次运行。要在多个代理上并行运行同一组任务,或者在不使用代理的情况下运行某些任务,使用job。 Build Task …...

贪心算法应用:多重背包启发式问题详解
贪心算法应用:多重背包启发式问题详解 多重背包问题是经典的组合优化问题,也是贪心算法的重要应用场景。本文将全面深入地探讨Java中如何利用贪心算法解决多重背包问题。 多重背包问题定义 **多重背包问题(Multiple Knapsack Problem)**是背包问题的变…...

【保姆级教程】PDF批量转图文笔记
如果你有一个PDF文档,然后你想把它发成图文笔记emmm,最好再加个水印,你会怎么做? 其实也不麻烦,打开PDF文档,挨个截图,然后打开PS一张一张图片拖进去,再把水印图片拖进去࿰…...
Pytest Fixture 是什么?
Fixture 是什么? Fixture 是 Pytest 测试框架的核心功能之一,用于为测试函数提供所需的依赖资源或环境。它的核心目标是: ✅ 提供测试数据(如模拟对象、数据库记录) ✅ 初始化系统状态(如配置、临时文件&a…...
Spring Boot 基础知识全面解析:快速构建企业级应用的核心指南
一、Spring Boot 概述:重新定义 Java 开发 1.1 什么是 Spring Boot? Spring Boot 是基于 Spring 框架的快速开发框架,旨在简化 Spring 应用的初始搭建及开发过程。它通过 「约定优于配置」(Convention Over Configuration&#…...

数据库系统概论(十一)SQL 集合查询 超详细讲解(附带例题表格对比带你一步步掌握)
数据库系统概论(十一)SQL 集合查询 超详细讲解(附带例题表格对比带你一步步掌握) 前言一、什么是集合查询?二、集合操作的三种类型1. 并操作2. 交操作3. 差操作 三、使用集合查询的前提条件四、常见问题与注意事项五、…...
[mcu]系统频率
系统主频的选择直接影响性能、功耗和成本,不同厂商的芯片会根据应用场景设计不同的运行频率。 低频段80MHZ~160MHz 典型频率: 80MHz、120MHz、160MHz 特点: 低功耗,适合电池供电设备 处理能力有限,通常仅支持 单天线…...

clickhouse如何查看操作记录,从日志来查看写入是否成功
背景 插入表数据后,因为原本表中就有数据,一时间没想到怎么查看插入是否成功,因为对数据源没有很多的了解,这时候就想怎么查看下插入是否成功呢,于是就有了以下方法 具体方法 根据操作类型查找,比如inse…...

5G-A:开启通信与行业变革的新时代
最近,不少细心的用户发现手机信号标识悄然发生了变化,从熟悉的 “5G” 变成了 “5G-A”。这一小小的改变,却蕴含着通信技术领域的重大升级,预示着一个全新的通信时代正在向我们走来。今天,就让我们深入了解一下 5G-A&a…...
鸿蒙OS在UniApp中集成Three.js:打造跨平台3D可视化应用#三方框架 #Uniapp
在UniApp中集成Three.js:打造跨平台3D可视化应用 引言 在最近的一个项目中,我们需要在UniApp应用中展示3D模型,并实现实时交互功能。经过技术选型和实践,我们选择了Three.js作为3D渲染引擎。本文将分享我们在UniApp中集成Three.…...
Vue 3 组件化设计实践:构建可扩展、高内聚的前端体系
Vue 3 自发布以来,其引入的 Composition API 与改进的组件模型,为前端架构提供了更强的可组合性、复用性与模块化能力。本文将系统性探讨 Vue 3 如何通过组件化设计,实现复杂应用的解耦、扩展与维护,并结合实际工程经验提供最佳实…...
腾讯云 Python3.12.8 通过yum安装 并设置为默认版本
在腾讯云服务器上,直接通过 yum 安装 Python 3.12.8 可能不可行,因为标准仓库通常不包含最新的 Python 版本。不过,我们可以通过添加第三方仓库或手动安装 RPM 包的方式实现。以下是完整解决方案: 方法 1: 通过第三方仓库安装&am…...
鸿蒙OSUniApp页面切换动效实战:打造流畅精致的转场体验#三方框架 #Uniapp
UniApp页面切换动效实战:打造流畅精致的转场体验 引言 在移动应用开发中,页面切换动效不仅能提升用户体验,还能传达应用的品质感。随着HarmonyOS的普及,用户对应用的动效体验要求越来越高。本文将深入探讨如何在UniApp中实现流畅…...
React 泛型组件:用TS来打造灵活的组件。
文章目录 前言一、什么是泛型组件?二、为什么需要泛型组件?三、如何在 React 中定义泛型组件?基础泛型组件示例使用泛型组件 四、泛型组件的高级用法带默认类型的泛型组件多个泛型参数 五、泛型组件的实际应用场景数据展示组件表单组件状态管…...

TDengine 集群运行监控
简介 为了确保集群稳定运行,TDengine 集成了多种监控指标收集机制,并通过 taosKeeper 进行汇总。taosKeeper 负责接收这些数据,并将其写入一个独立的 TDengine 实例中,该实例可以与被监控的 TDengine 集群保持独立。TDengine 中的…...
图像任务中的并发处理:线程池、Ray、Celery 和 asyncio 的比较
在图像缺陷检测任务中,处理大量图像和点云数据时,高效的并发处理是关键。本文将介绍五种流行的并发处理方法:线程池(concurrent.futures.ThreadPoolExecutor)、Ray、Celery、asyncio以及搜狗Workflow,并从原…...
DeepSeek 赋能智能物流:解锁仓储机器人调度的无限可能
目录 一、智能物流仓储机器人调度现状1.1 传统调度面临的挑战1.2 现有智能调度的进展与局限 二、DeepSeek 技术探秘2.1 DeepSeek 核心技术原理2.2 DeepSeek 的独特优势 三、DeepSeek 在智能物流仓储机器人调度中的创新应用3.1 智能任务分配与调度3.2 路径规划与避障优化3.3 实时…...
C#上传图片后压缩
上传的图片尺寸不一,手机拍照的有2000*2000像素的,对实际使用来说 文件尺寸太大,文件也有近4M 下面是直接压缩的方法 1、安装包 Magick.NET-Q16-AnyCPU 2、上代码 /// <summary> /// 缩放图片 /// </summary> /// <param …...

uniapp路由跳转toolbar页面
需要阅读uview-ui的API文档 注意需要使用type参数设置后才起作用 另外route跳转的页面会覆盖toolbar工具栏 toConternt(aid) {console.log(aid:, aid)this.$u.route({// url: "pages/yzpg/detail",url: "pages/yzappl/index",// url: "pages/ind…...

【linux】知识梳理
操作系统的分类 1. 桌⾯操作系统: Windows/macOS/Linux 2. 移动端操作系统: Android(安卓)/iOS(苹果) 3. 服务器操作系统: Linux/Windows Server 4. 嵌⼊式操作系统: Android(底层是 Linux) Liunx介绍 liunx系统:服务器端最常见的操作系统类型 发行版:Centos和Ubuntu 远程连接操…...
PostgreSQL 内置扩展列表
PostgreSQL 内置扩展列表 PostgreSQL 自带了许多内置扩展(built-in extensions),这些扩展提供了额外的功能而不需要额外安装。以下是主要的内置扩展分类和说明: 标准内置扩展(随核心安装) 1. 管理类扩展…...