QT-----------GUI程序设计基础

项目配置文件

  • .pro文件:这是QT项目的核心配置文件,用于指定项目的名称、版本、源文件、头文件、库文件等信息。例如:
QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++11

# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You are also advised to unset the QT_DEPRECATED_WARNINGS define above.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
    main.cpp \
    mainwindow.cpp

HEADERS += \
    mainwindow.h

FORMS += \
    mainwindow.ui
  • .user文件:用于保存用户对项目的个性化设置,如代码风格、编译器选项等,通常不需要手动修改。

UI文件

  • .ui文件:是QT的用户界面设计文件,采用XML格式。可以通过QT的可视化设计器进行图形化编辑,设计窗口的布局、添加各种控件并设置其属性和信号槽连接等。例如,创建一个简单的登录窗口UI文件,在设计器中可以添加文本框、按钮、标签等控件,并设置它们的位置、大小、字体、颜色等属性,以及按钮的点击信号与相应槽函数的连接。在程序运行时,QT会根据.ui文件自动生成对应的C++代码来创建和显示界面。

主程序文件

  • main.cpp:是程序的入口点,主要负责创建应用程序对象、显示主窗口并启动事件循环。例如:
#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

窗口相关文件

  • 窗口类的头文件(.h):定义了窗口类的结构,包括类的声明、成员变量和成员函数的声明等。例如,一个主窗口类的头文件可能如下:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    // 在这里可以定义窗口的私有成员变量和私有函数
};

#endif // MAINWINDOW_H
  • 窗口类的源文件(.cpp):包含了窗口类的成员函数的实现,如窗口的初始化、控件的操作、信号槽的连接等。例如:
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
   , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    // 在这里可以进行其他初始化操作,如设置窗口标题、连接信号槽等
    setWindowTitle("My QT Application");
}

MainWindow::~MainWindow()
{
    delete ui;
}

除此之外,根据项目的具体需求,还可能包含其他自定义的头文件、源文件、资源文件(如图片、图标、翻译文件等)以及第三方库文件等。这些文件共同构成了一个完整的QT GUI项目,协同工作以实现丰富的图形用户界面应用程序。
在这里插入图片描述

窗口界面可视化管理

  • QT提供了可视化设计器,如Qt Designer,在这个设计器中可以直观地创建和编辑窗口界面。通过拖拽和放置各种控件,如按钮、文本框、标签、菜单等,快速搭建出应用程序的外观。
  • 可以在属性编辑器中方便地设置每个控件的属性,如大小、位置、颜色、字体、文本内容等,还能对整个窗口进行布局管理和样式设置,无需手动编写大量的代码来创建和配置界面。

界面组件布局管理

  • 布局管理器:QT提供了多种布局管理器,如水平布局(QHBoxLayout)、垂直布局(QVBoxLayout)、网格布局(QGridLayout)等。使用布局管理器可以自动调整控件的大小和位置,以适应窗口的大小变化,确保界面在不同分辨率和窗口大小下都能保持良好的显示效果。
  • 嵌套布局:可以将不同的布局管理器进行嵌套使用,实现复杂的界面布局。例如,在一个垂直布局中,可以嵌套水平布局和网格布局,以满足特定的界面设计需求。

信号与槽简介

  • 信号:是对象发出的事件通知,用于表示某个特定的事件已经发生,如按钮的点击、文本框内容的改变、窗口的关闭等。信号是由QT的元对象系统自动生成和管理的,不需要手动触发。
  • :是与信号相对应的响应函数,用于接收信号并执行相应的操作。槽函数是普通的C++成员函数,可以在其中编写具体的业务逻辑代码,以响应信号所表示的事件。
  • 信号与槽的连接:通过将信号与槽进行连接,当信号被发射时,与之连接的槽函数就会被自动调用。这种机制实现了对象之间的松散耦合,使得代码更加模块化和易于维护。

信号与槽的使用

  • 连接方式:在QT中,可以使用QObject::connect()函数来连接信号与槽,也可以在可视化设计器中通过信号槽编辑模式进行图形化连接。例如,连接一个按钮的clicked()信号到一个自定义槽函数on_button_clicked(),可以在代码中这样写:
connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(on_button_clicked()));
  • 自定义信号与槽:除了使用QT自带的信号和槽,还可以在自定义类中定义自己的信号和槽。通过emit关键字在适当的时候发射自定义信号,然后在其他类中连接并响应这些信号,实现更加灵活的功能。

为应用程序设置图标

  • 添加图标资源:首先将图标文件(如.ico、.png等格式)添加到项目资源文件中,可以通过QT的资源管理系统进行添加和管理。
  • 在代码中设置图标:在主程序文件或主窗口类的构造函数中,使用QApplication或QWidget的setWindowIcon()函数来设置应用程序的图标。例如:
#include <QApplication>
#include <QIcon>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    a.setWindowIcon(QIcon(":/icons/myicon.ico"));
    // 其他代码...
    return a.exec();
}

QT项目构建过程基本原理

  • qmake:首先,QT项目中的.pro文件会被qmake工具处理。qmake会解析.pro文件中的配置信息,如源文件、头文件、库文件的依赖关系,以及项目的编译选项等,并生成相应的Makefile或其他构建系统所需的文件。
  • 编译:根据生成的Makefile,编译器会对项目中的源文件进行编译,将C++代码转换为目标文件(.o文件)。在编译过程中,会根据头文件中的声明和定义进行语法检查和语义分析,确保代码的正确性。
  • 链接:编译生成的目标文件会被链接器进行链接,将各个目标文件以及所需的库文件连接在一起,生成可执行文件或动态链接库等最终产品。在链接过程中,会解决符号引用和地址分配等问题,确保程序能够正确运行。

QT的可视化UI设计和项目构建过程为开发者提供了高效、便捷的开发方式,使得开发图形用户界面应用程序变得更加容易和高效。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/945475.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

爆改RagFlow

爆改RagFlow 一、Rag理论概述二、Ragflow解析参数说明三、♥ RagFlow源码解析核心代码流程梳理1、OCR识别2、版面分析3、parser功能3.1 PdfParser3.1.1 首先&#xff0c;初始化3.1.2 **pdf转图片** [来自工业界的知识库 RAG 服务(二)&#xff0c;RagFlow 源码全流程深度解析](h…

实际部署Dify可能遇到的问题:忘记密码、开启HTTPS、知识库文档上传的大小限制和数量限制

背景 前面我们以 docker compose 容器化的方式本地部署了 Dify 社区版&#xff0c;并快速体验了其聊天助手、工作量编排以及智能体&#xff08;Agent&#xff09;功能。不过后续实际生产环境使用时遇到了忘记密码、如何开启SSL以支持HTTPS、如何突破知识库文档上传的大小限制和…

Ubuntu安装Apache Airflow详细指南

本文我们介绍如何在Ubuntu上安装Apache Airflow。Apache Airflow旨在通过编程方式编写、调度和监控工作流。随着数据编排在现代数据工程中变得越来越重要&#xff0c;掌握Apache Airflow等工具可以显著提高您的生产力和效率。 学习Apache Airflow的首要任务是安装单机版本进行测…

Learning Multi-Scale Photo Exposure Correction

Abstract 用错误的曝光捕捉照片仍然是相机成像的主要错误来源。曝光问题可分为以下两类:(i)曝光过度&#xff0c;即相机曝光时间过长&#xff0c;导致图像区域明亮和褪色;(ii)曝光不足&#xff0c;即曝光时间过短&#xff0c;导致图像区域变暗。曝光不足和曝光过度都会大大降低…

【python】matplotlib(moon cake)

文章目录 1、Style12、Style23、Style34、Style45、Style56、Style67、Style78、参考的库函数matplotlib.patches.Arcmatplotlib.patches.Wedge 9、参考 1、Style1 """ author: tyran """from numpy import sin, cos, pi import matplotlib.pyp…

node.js卸载并重新安装(超详细图文步骤)

卸载node.js 重新安装nodejs 一、卸载 1、首先进入控制面板卸载程序 2、卸载后 到文件夹中进行进一步的删除 删除上述的几个文件夹 每个人可能不一样&#xff0c;总之是找到自己的nodejs安装路径&#xff0c;下面是我的 ①删除C:UsersAdminAppDataRoaming路径下的npm相关文件…

每天40分玩转Django:Django表单集

Django表单集 一、知识要点概览表 类别知识点掌握程度要求基础概念FormSet、ModelFormSet深入理解内联表单集InlineFormSet、BaseInlineFormSet熟练应用表单集验证clean方法、验证规则熟练应用自定义配置extra、max_num、can_delete理解应用动态管理JavaScript动态添加/删除表…

抽奖2(信奥)

【问题描述】 公司举办年会&#xff0c;为了活跃气氛&#xff0c;设置了摇奖环节。参加聚会的每位员工都有一张带有号码的抽奖券。现在&#xff0c;主持人从小到依次公布了n个不同的获奖号码&#xff0c;小谢看着自己抽奖券上的号码win&#xff0c;无比紧张。请编写一个程序&am…

JWT包中的源码分析【Golang】

前言 最近在学web编程的途中&#xff0c;经过学长提醒&#xff0c;在进行登陆&#xff08;Login&#xff09;操作之后&#xff0c;识别是否登陆的标识应该要放入authorization中&#xff0c;正好最近也在学鉴权&#xff0c;就顺便来看看源码了。 正文 1. 代码示例 在进行分…

Airbnb/Booking 系统设计(high level architecture)

原文地址 CodeKarle: Airbnb System Design | Booking.com System Design B站搜 “Airbnb System Design” 有视频版本 需求&#xff1a; 功能性需求 系统用户包括商家和客人。 Hotel - 商家&#xff08;拥有hotel的人&#xff09; onboarding - 商家可以入住系统。 update…

windows系统安装完Anaconda之后怎么激活自己的虚拟环境并打开jupyter

1.在win主菜单中找到Anaconda安装文件夹并打开终端 文件夹内有所有安装后的Anaconda的应用软件和终端窗口启动窗口 点击Anaconda Prompt&#xff08;Anaconda&#xff09;就会打开类似cmd的命令终端窗口&#xff0c;默认打开的路径是用户名下的路径 2.激活虚拟环境 使用命令…

C++进阶(三)--多态

目录 一、多态的基本概念 1.什么是多态 二、多态的定义及实现 1.虚函数 2.虚函数的重写 3.虚函数重写的⼀些其他问题 协变(了解) 析构函数的重写 C11 override和final 4.重载、覆盖(重写)、隐藏(重定义)的对比 三、抽象类 1.纯虚函数 2.接口继承和实现继承 四、多…

2025经典的软件测试面试题(答案+文档)

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 以下是软件测试相关的面试题及答案&#xff0c;希望对各位能有帮助&#xff01; 1、测试分为哪几个阶段? 一般来说分为5个阶段&#xff1a;单元测试、集成测试…

海南省首套数据资产化系列团体标准正式发布

近日&#xff0c;首套数据资产化系列团体标准正式发布。本次系列涵盖《数据资产 数据治理规范》、《数据资产数据质量评价规范》、《数据资产 数据评估定价办法》和《数据资产 入表流程规范化标准》四项团体标准&#xff0c;通过海南省人工智能学会面向行业发布&#xff0c;自2…

突发!GitLab(国际版)将停止对中国区用户提供 GitLab.com 账号服务

消息称&#xff1a; 目前&#xff0c;为了更加严格的遵循中国网络数据安全管理的相关要求&#xff0c;GitLab SaaS&#xff08;国际版&#xff09;已逐步停止向国内用户提供服务与支持&#xff0c;国内用户亦无法注册或使用 GitLab SaaS&#xff08;国际版&#xff09;。自您的…

LLaVA模型讲解与总结

系列文章目录 第一章&#xff1a;LoRA微调系列笔记 第二章&#xff1a;Llama系列关键知识总结 第三章&#xff1a;LLaVA模型讲解与总结 文章目录 系列文章目录LLaVA&#xff08;Large Language and Vision Assistant&#xff09;Q: 这篇论文试图解决什么问题&#xff1f;Q: 论…

【linux内核分析-存储】EXT4源码分析之“创建文件”原理

EXT4源码分析之“文件创建”原理&#xff0c;详细的介绍文件创建的核心流程&#xff0c;并对EXT4中关于文件创建的关键函数进行了分析。 文章目录 0.前言1.创建文件概览1.1关键流程1.2 关键步骤说明 2.源码分析2.1 入口函数ext4_create2.2 分配inode关键函数 ext4_new_inode_st…

自学记录鸿蒙 API 13:骨骼点检测应用Core Vision Skeleton Detection

骨骼点检测技术是一项强大的AI能力&#xff0c;能够从图片中识别出人体的关键骨骼点位置&#xff0c;如头部、肩部、手肘等。这些信息在人体姿态分析、动作捕捉、健身指导等场景中有着广泛应用。我决定深入学习HarmonyOS Next最新版本API 13中的Skeleton Detection API&#xf…

使用ArcGIS Pro自带的Notebook计算多个遥感指数

在之前的分享中&#xff0c;我们介绍了如何使用ArcPy将GEE下载的遥感影像转为单波段文件。基于前面创建的单波段文件&#xff0c;我们可以一次性计算多种遥感指数&#xff0c;例如NDVI、EVI、NDSI等。我这里直接在ArcGIS Pro中自带的Notebook进行的运行。如下图所示&#xff0c…

XGPT用户帮助手册

文章目录 2024 更新日志2024.12.272024.12.29 摘要 本文详细介绍了XGPT软件的功能及发展历程。XGPT是一款融合了当前最先进人工智能技术的多模态智能软件&#xff0c;专为国内用户优化设计。除了强大的智能问答功能外&#xff0c;XGPT还结合日常办公和科学研究的需求&#xff0…