QT使用说明

news2025/6/5 10:40:27

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.ui

0 directories, 6 files

  1. helloworld.pro:

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

    示例内容:

    TEMPLATE = app
    TARGET = helloworld
    QT += widgets
    
    SOURCES += main.cpp \
               mainwindow.cpp
    
    HEADERS += mainwindow.h
    
    FORMS += 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_OBJECT
    
    public:
        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_OBJECT

public:
    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.coloradmin.cn/o/2397570.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构:递归(Recursion)

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

Cesium快速入门到精通系列教程一:打造第一个Cesium应用

一、打造第一个Cesium应用 1、官方渠道下载Cesium&#xff08;可选择历史版本&#xff09; ​​GitHub Releases页面​​&#xff1a;https://github.com/CesiumGS/cesium/releases 访问 Cesium GitHub Releases&#xff0c;此处列出了所有正式发布的版本。 通过标签&#…

力扣题解106:从中序与后序遍历序列构造二叉树

一、题目内容 题目要求根据二叉树的中序遍历序列和后序遍历序列来重建二叉树。具体来说&#xff0c;我们需要利用中序遍历序列和后序遍历序列的特点&#xff0c;通过递归的方法逐步构建出完整的二叉树。 中序遍历序列的特点是&#xff1a;左子树 -> 根节点 -> 右子树。后…

学习STC51单片机25(芯片为STC89C52RCRC)

每日一言 生活就像弹簧&#xff0c;你弱它就强&#xff0c;你强它就弱&#xff0c;别轻易认输。 ESP8266作为路由器模式&#xff08;AP模式&#xff09;也就是在局域网内可以有服务器的作用 那么我们需要将pc作为设备进行连接ESP的发射出来的WIFE 叫做这个AI啥的 也有可能叫做…

宁夏农业科技:创新引领,赋能现代农业新篇章

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

Accelerate 2025北亚巡展正式启航!AI智御全球·引领安全新时代

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

005学生心理咨询评估系统技术解析:搭建科学心理评估平台

学生心理咨询评估系统技术解析&#xff1a;搭建科学心理评估平台 在心理健康教育日益受重视的当下&#xff0c;学生心理咨询评估系统成为了解学生心理状态的重要工具。该系统涵盖试卷管理、试题管理等核心模块&#xff0c;面向管理员和用户两类角色&#xff0c;通过前台展示与…

贪心算法应用:多重背包启发式问题详解

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

【保姆级教程】PDF批量转图文笔记

如果你有一个PDF文档&#xff0c;然后你想把它发成图文笔记emmm&#xff0c;最好再加个水印&#xff0c;你会怎么做&#xff1f; 其实也不麻烦&#xff0c;打开PDF文档&#xff0c;挨个截图&#xff0c;然后打开PS一张一张图片拖进去&#xff0c;再把水印图片拖进去&#xff0…

数据库系统概论(十一)SQL 集合查询 超详细讲解(附带例题表格对比带你一步步掌握)

数据库系统概论&#xff08;十一&#xff09;SQL 集合查询 超详细讲解&#xff08;附带例题表格对比带你一步步掌握&#xff09; 前言一、什么是集合查询&#xff1f;二、集合操作的三种类型1. 并操作2. 交操作3. 差操作 三、使用集合查询的前提条件四、常见问题与注意事项五、…

clickhouse如何查看操作记录,从日志来查看写入是否成功

背景 插入表数据后&#xff0c;因为原本表中就有数据&#xff0c;一时间没想到怎么查看插入是否成功&#xff0c;因为对数据源没有很多的了解&#xff0c;这时候就想怎么查看下插入是否成功呢&#xff0c;于是就有了以下方法 具体方法 根据操作类型查找&#xff0c;比如inse…

5G-A:开启通信与行业变革的新时代

最近&#xff0c;不少细心的用户发现手机信号标识悄然发生了变化&#xff0c;从熟悉的 “5G” 变成了 “5G-A”。这一小小的改变&#xff0c;却蕴含着通信技术领域的重大升级&#xff0c;预示着一个全新的通信时代正在向我们走来。今天&#xff0c;就让我们深入了解一下 5G-A&a…

TDengine 集群运行监控

简介 为了确保集群稳定运行&#xff0c;TDengine 集成了多种监控指标收集机制&#xff0c;并通过 taosKeeper 进行汇总。taosKeeper 负责接收这些数据&#xff0c;并将其写入一个独立的 TDengine 实例中&#xff0c;该实例可以与被监控的 TDengine 集群保持独立。TDengine 中的…

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 远程连接操…

NodeMediaEdge快速上手

NodeMediaEdge快速上手 简介 NodeMediaEdge是一款部署在监控摄像机网络前端中&#xff0c;拉取Onvif或者rtsp/rtmp/http视频流并使用rtmp/kmp推送到公网流媒体服务器的工具。 通过云平台协议注册到NodeMediaServer后&#xff0c;可以同NodeMediaServer结合使用。使用图形化的…

ChatOn:智能AI聊天助手,开启高效互动新时代

在当今快节奏的生活中&#xff0c;无论是工作、学习还是日常交流&#xff0c;我们常常需要快速获取信息、整理思路并高效完成任务。ChatOn 正是为满足这些需求而生&#xff0c;它基于先进的 ChatGPT 和 GPT-4o 技术&#xff0c;为用户提供市场上最优秀的中文 AI 聊天机器人。这…

基于Vue3.0的【Vis.js】库基本使用教程(002):图片知识图谱的基本构建和设置

文章目录 3、图片知识图谱3.1 初始化图片知识图谱3.2 修改节点形状3.3 修改节点背景颜色3.4 完整代码下载3、图片知识图谱 3.1 初始化图片知识图谱 1️⃣效果预览: 2️⃣关键代码: 给节点添加image属性: const nodes = ref([{id: 1,

C# Costura.Fody 排除多个指定dll

按照网上的说在 FodyWeavers.xml 里修改 然后需要注意的是 指定多个排除项 不是加 | 是换行 一个换行 就排除一项 我测试的 <?xml version"1.0" encoding"utf-8"?> <Weavers xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance&quo…

设计模式——迭代器设计模式(行为型)

摘要 本文详细介绍了迭代器设计模式&#xff0c;这是一种行为型设计模式&#xff0c;用于顺序访问集合对象中的元素&#xff0c;同时隐藏集合的内部结构。文章首先定义了迭代器设计模式并阐述了其核心角色&#xff0c;包括迭代器接口、具体迭代器、容器接口和具体容器。接着&a…