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

  1. 打开 Qt Creator。
  2. 选择 “New Project”。
  3. 选择 “Application” > “Qt Widgets Application”。
  4. 输入项目名称和位置,然后点击 “Next”。
  5. 选择合适的构建工具(例如, 默认的 Qt 版本),然后点击 “Next”。
  6. 点击 “Finish” 完成项目创建。
  7. 修改代码,mainwindow.cpp
  8. 选择菜单中的 “Build” > “Build Project” 来构建项目。
  9. 然后选择 “Run” > “Run Project” 来运行程序。
  10. 当你运行程序时,会看到一个窗口,窗口中央显示 “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
  1. helloworld.pro:

    • 这是 Qt 项目的项目文件,使用 Qt 的 qmake 工具进行构建。它包含了项目的配置信息,例如:
      • 项目名称
      • 需要的 Qt 模块(如 core, gui, widgets 等)
      • 源文件和头文件的列表
      • 资源文件的路径
      • 其他编译选项
    • 该文件是用纯文本格式编写的,通常可以用任何文本编辑器打开和编辑。

    示例内容:

    TEMPLATE = app
    TARGET = helloworld
    QT += widgetsSOURCES += main.cpp \mainwindow.cppHEADERS += mainwindow.hFORMS += mainwindow.ui
    
  2. helloworld.pro.user:

    • 这是 Qt Creator 自动生成的用户配置文件,包含了用户的本地设置,如打开的文件、窗口位置等。通常不需要手动编辑或关注这个文件,它的内容是特定于用户的。
  3. 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();
    }
    
  4. 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;
    }
    
  5. 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
    
  6. 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 是一个全局指针,指向当前的应用程序对象。它是 QApplicationQGuiApplication 的一个实例。通过 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/83024.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/83024.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/83024.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React 第四十九节 Router中useNavigation的具体使用详解及注意事项

前言 useNavigation 是 React Router 中一个强大的钩子&#xff0c;用于获取当前页面导航的状态信息。 它可以帮助开发者根据导航状态优化用户体验&#xff0c;如显示加载指示器、防止重复提交等。 一、useNavigation核心用途 检测导航状态&#xff1a;判断当前是否正在进行…

列表单独展开收起同时关闭其余子项的问题优化

如图所示&#xff0c;当在列表中&#xff0c;需要分别单独点开子选项时&#xff0c;直接这样用一个index参数判断即可&#xff0c;非常简单方便&#xff0c;只需要满足点开当前index,然后想同index用null值自动关闭即可

WPF【11_5】WPF实战-重构与美化(MVVM 实战)

11-10 【重构】创建视图模型&#xff0c;显示客户列表 正式进入 MVVM 架构的代码实战。在之前的课程中&#xff0c; Model 和 View 这部分的代码重构实际上已经完成了。 Model 就是在 Models 文件夹中看到的两个文件&#xff0c; Customer 和 Appointment。 而 View 则是所有与…

LangChain-结合魔塔社区modelscope的embeddings实现搜索

首先要安装modelscope pip install modelscope 安装完成后测试 from langchain_community.embeddings import ModelScopeEmbeddingsembeddings ModelScopeEmbeddings(model_id"iic/nlp_gte_sentence-embedding_chinese-base")text "这是一个测试句子"…

可定制化货代管理系统,适应不同业务模式需求!

在全球化贸易的浪潮下&#xff0c;货运代理行业扮演着至关重要的角色。然而&#xff0c;随着市场竞争的日益激烈&#xff0c;货代企业面临着越来越多的挑战&#xff1a;客户需求多样化、业务流程复杂化、运营成本上升、利润空间压缩……这些挑战迫使货代企业不断寻求创新和突破…

Lyra学习笔记2 GFA_AddComponents与ULyraPlayerSpawningManagerComponent

目录 前言GameFeatureAction_AddComponentsULyraPlayerSpawningManagerComponent缓存所有PlayerStart位置选择位置 前言 1.以control模式为例 2.比较散&#xff0c;想单独拿出一篇梳理下Experience的流程 GameFeatureAction_AddComponents 这部分建议看 《InsideUE5》GameFeatu…

进程生命周期

进程生命周期 Linux是多任务操作系统&#xff0c;系统中的每个进程能够分时复用CPU时间片&#xff0c;通过有效的进程调度策略实现多任务并行执行。进程在被CPU调度运行&#xff0c;等待CPU资源分配以及等待外部事件时会处于不同的状态。进程状态如下&#xff1a; 创建状态&a…

文字转图片的字符画生成工具

软件介绍 今天要介绍的这款软件可以将文字转换成图片的排列形式&#xff0c;非常适合需要将文字图形化的场景&#xff0c;建议有需要的朋友收藏。 软件名称与用途 这款软件名为《字符画大师》&#xff0c;是一款在网吧等场所非常流行的聊天辅助工具&#xff0c;其主要功能就…

历年南京大学计算机保研上机真题

2025南京大学计算机保研上机真题 2024南京大学计算机保研上机真题 2023南京大学计算机保研上机真题 在线测评链接&#xff1a;https://pgcode.cn/school Count Number of Binary Strings 题目描述 Given a positive integer n n n ( 3 ≤ n ≤ 90 3 \leq n \leq 90 3≤n≤…

王树森推荐系统公开课 排序06:粗排模型

shared bottom 表示神经网络被所有特征共享。精排模型主要开销在神经网络&#xff0c;神经网络很大且很复杂。 每做一次推荐&#xff0c;用户塔只做一次推理。物品塔存放入向量数据库。 后期融合模型常用于召回&#xff0c;前期融合模型常用于精排。 物品塔短时间内比较稳…

VSCode的下载与安装(2025亲测有效)

目录 0 前言1 下载2 安装3 后记 0 前言 丫的&#xff0c;谁懂啊&#xff0c;尝试了各种办法不行的话&#xff0c;我就不得不拿出我的最后绝招了&#xff0c;卸载&#xff0c;重新安装&#xff0c;我经常要重新安装&#xff0c;所以自己写了一个博客&#xff0c;给自己&#xf…

端午节互动网站

端午节互动网站 项目介绍 这是一个基于 Vue 3 Vite 开发的端午节主题互动网站&#xff0c;旨在通过有趣的交互方式展示中国传统端午节文化。网站包含三个主要功能模块&#xff1a;端午节介绍、互动包粽子游戏和龙舟竞赛游戏。 预览网站&#xff1a;https://duanwujiekuaile…

Python+requests+pytest接口自动化测试框架的搭建(全)

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 框架的设计思路 首先要明确进行接口自动化需要的步骤&#xff0c;如下图所示&#xff1a; 然后逐步拆解需要完成的工作&#xff1a; 1&#xff09;了解分析需求&…

OpenCV视觉图片调整:从基础到实战的技术指南

引言:数字图像处理的现代意义与OpenCV深度应用 在人工智能与计算机视觉蓬勃发展的今天,图像处理技术已成为多个高科技领域的核心支撑。根据市场研究机构Grand View Research的数据,全球计算机视觉市场规模预计将从2022年的125亿美元增长到2030年的253亿美元,年复合增长率达…

JS手写代码篇---手写节流函数

8、节流函数 什么是节流函数&#xff1f; 指规定一个单位时间&#xff0c;在这个单位时间内&#xff0c;只能有一次触发事件的回调函数执行&#xff0c;如果在同一个单位时间内某事件被触发多次&#xff0c;只有一次能生效。 与防抖函数有什么区别&#xff1f; 防抖函数是延…

2025年05月30日Github流行趋势

项目名称&#xff1a;agenticSeek 项目地址url&#xff1a;https://github.com/Fosowl/agenticSeek项目语言&#xff1a;Python历史star数&#xff1a;13040今日star数&#xff1a;1864项目维护者&#xff1a;Fosowl, steveh8758, klimentij, ganeshnikhil, apps/copilot-pull-…

node_modules包下载不下来

如果项目里面的package-lock.json有resolved &#xff0c;就指向了包的下载来源&#xff0c;如果这个网址挂了&#xff0c;那npm i 就会一直卡着。而且&#xff0c;在终端去修改 npm的镜像是没有用的 解决办法是:把项目里面的 lock文件 .npmrc都删了 然后重新下载就可以了

OramaCore 是您 AI 项目、答案引擎、副驾驶和搜索所需的 AI 运行时。它包括一个成熟的全文搜索引擎、矢量数据库、LLM界面和更多实用程序

一、软件介绍 文末提供程序和源码下载 OramaCore 是您的项目、答案引擎、副驾驶和搜索所需的 AI 运行时。 它包括一个成熟的全文搜索引擎、矢量数据库、LLM具有行动计划和推理功能的接口、用于根据数据编写和运行您自己的自定义代理的 JavaScript 运行时&#xff0c;以及更多…

小白成长之路-计算机网络(四)

文章目录 前言一、网络连接查看1.netstat2.ss3.bond绑定3.1准备好这三个文件3.2添加bond配置文件3.3关闭网络图形化服务3.4重启 4.Linux下的抓包工具Wireshark 5、web压力测试工具6、路由追踪命令 二、[练习题](https://blog.csdn.net/m0_70730767/article/details/148262716?…

CppCon 2014 学习:Lock-Free Programming

你这段文字讲的是“为什么要使用无锁&#xff08;Lock-Free&#xff09;代码”&#xff0c;我帮你总结并解释一下&#xff1a; 为什么选择无锁代码&#xff1f; 并发性和可扩展性&#xff08;Concurrency and scalability&#xff09; 无锁算法允许多个线程同时操作共享数据&a…