当前位置: 首页 > news >正文

qt的项目结构

目录

创建新的项目

 第一个hell0程序,qt的项目结构

main函数

Widget头文件:

·pro文件

命名规范

 QtCreator 常用快捷键

Qt里边绝大部分的类都是继承自QObject是一个顶层类

父子关系

Qt坐标系

QT常用API函数

对象树

信号和槽机制

自定义信号和槽

自定义信号

自定义槽

参数二义性问题

信号和槽的参数关系

 QDebug


创建新的项目

下一步

下一步

下一步 

下一步

 第一个hell0程序,qt的项目结构

创建顶目的时候 Qwidget、OMainWindow、ODialog 是所有能看到的窗口或者控件的父类,OMainWindow、ODialog 都继承自它

main函数

QApplication 就是EQT里边每个应用程序有且仅有一个的应用程序对象

QApplication:: exec()程序的生命循环、消息循还,当作以下形式
while(1)
{
        if(点击x按钮)

        break;

        if(点击了最小化按钮)

        最小化动作;
}

Widget头文件:

Q_OBJECT //宏,引入qt信号和槽的一个宏

HelloWidget(OWidget *parent=0);

//parent窗日指针,父窗口对象的指针

//如果parent为0或者NULL,表示当前窗口对象是个顶层窗口

//顶层窗口就是在任务栏可以找到的窗口

·pro文件

QT | += core gui #引入gt的模块

greaterThan(QT_MAJOR_VERSION,4):QT += widgets 如果qt版本号大于4,则添加widgets模块到项目中。

指定目标,生成可执行程序的名字 TARGET  01_hello
模板,生成什么文件,app表示应用程序exe,lib就是生成库TEMPLATE = app

命名规范

  1. 类命名

    • 类名使用驼峰式命名法(CamelCase),首字母大写,例如:QApplication
    • Qt类名通常以Q开头,以示它们属于Qt框架。
  2. 变量命名

    • 变量名使用驼峰式命名法,首字母小写,例如:myVariable
  3. 函数命名文件命名

    • 函数名使用驼峰式命名法,首字母小写,例如:void myFunction()
    • 头文件通常使用.h扩展名,源文件使用.cpp扩展名。
    • 文件名应该与类名或功能相关联,使用驼峰式命名法,例如:MyClass.hMyClass.cpp

 QtCreator 常用快捷键

运行 ctr +R

编译 ctr +B

帮助文档 F1,点击F1两次跳到帮助界面

跳到符号定义F2 或者 ctr+ 鼠标点击

注释 ctr+/

字体缩放 ctr+ 鼠标滚轮

整行移动代码ctr+shit+个或↓

自动对齐 ctrl+i

同名之间的.h和.cpp 文件跳转 F4

Qt里边绝大部分的类都是继承自QObject是一个顶层类

父子关系

默认情况下按钮没有认干爹的情况下,是个顶层窗口想要按钮显示在窗口上,就要跟窗口构造父子关系
l setParent

#include "hellowidget.h"
#include "qpushbutton.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);helloWidget w;QPushButton btn;btn.setText("按钮");btn.setParent(&w);w.show();return a.exec();
}

 2 构造函数传参

#include "hellowidget.h"
#include "qpushbutton.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);helloWidget w;QPushButton btn("按钮",&w);w.show();return a.exec();
}

Qt坐标系

是以父窗口的左上角为0,0

以向右的方向为x的正方向

以向下的方向为y的正方向

顶层窗口就是以屏幕左上角为0,0

btn.move(100,100);

QT常用API函数

move 移动窗口到父窗口某个坐标

resize 重新设置窗口的大小

setFixedsize 设置窗口的固定大小

setWindowTitle 设置窗口标题

setGeometry 同时设置窗口位置和大小,相当于move和resize的结合体

#include "hellowidget.h"
#include "qpushbutton.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);helloWidget w;QPushButton btn("按钮",&w);btn.move(100,100);btn.resize(100,100);w.setWindowTitle("你好");w.setFixedSize(400,400);w.show();return a.exec();
}

对象树

概念:各个窗口对象通过建立父子关系构造对的一个关系树
内存管理:
        父对象释放的时候会自动释放各个子对象(使用children列表)

以后基本都是用new的方式来创建窗口对象

helloWidget::helloWidget(QWidget *parent): QWidget(parent)
{QPushButton *btn = new QPushButton("按钮",this);}

注意点:
        1 父对象能够被释放

        2 父对象、子对象,直接或者间接继承自Q0bject

信号和槽机制

信号:各种事件。
槽: 响应信号的动作。

信号发送者

信号

信号接收者

槽:信号的处理动作

connect(信号发送者,信号,信号接收者,槽:信号的处理动作)

QPushButton *btn = new QPushButton("按钮",this);connect(btn,&QPushButton::clicked,this,&helloWidget::close);

自定义信号和槽

自定义信号

函数声明在类头文件的signals域下面

void 类型的函数,没有返回值

可以有参数,也可以重裁

只有声明,没有实现定义

触发信号 emit obj->sign(参数...)

自定义槽

函数声明在类头文件的public/private/protected slots域下面(qt4以前的版本)qt5 就可以声明在类的任何位置,还可以是静态成员函数、全局函数、lambda表达式

void 类型的函数,没有返回值

可以有参数,也可以重载

不仅有声明,还得有实现

参数二义性问题

使用函数指针赋值,让编译器自动挑选符合类型的函数

#include <iostream>void foo(int x) {std::cout << "foo(int): " << x << std::endl;
}void foo(double x) {std::cout << "foo(double): " << x << std::endl;
}int main() {void (*funcPtr)(int) = foo; // 函数指针类型为 void (*)(int)funcPtr(10); // 编译器会选择匹配的 foo(int)funcPtr = foo; // 此时编译器可以自动选择 foo(int) 或者 foo(double) 中的一个funcPtr(3.14); // 编译器会选择匹配的 foo(double)return 0;
}

使用static_cast 强制转换 ,让编译器自动挑选符合类型的函数

#include <iostream>void foo(int x) {std::cout << "foo(int): " << x << std::endl;
}void foo(double x) {std::cout << "foo(double): " << x << std::endl;
}int main() {// 使用 static_cast 明确指定函数指针类型void (*funcPtr)(int) = static_cast<void (*)(int)>(foo);funcPtr(10); // 编译器会选择匹配的 foo(int)// 使用 static_cast 明确指定函数指针类型funcPtr = static_cast<void (*)(int)>(foo);funcPtr(3.14); // 编译器会选择匹配的 foo(double)return 0;
}

信号和槽的参数关系

必须同时满足以下两点

信号和槽函数的参数类型必须对应

信号和槽函数的参数个数不需要一致,信号函数参数个数>=槽函数参数个数
hungry(QString)        ->        treat ()              OK

hungry(Qstring)        ->        treat (int)           编译出错

hungry(Qstring,int)        ->        treat (int)      编译出错

 QDebug

qdeubg输出Qstring默认会转义
解决方法两个

将String转成char*

qDebúg()<<"Student treat teacher with "<<what.toUtf8 ().data();

使用qDebug().noquote()

qDebug().noquote()<<"Student treat teacher with "<<what ;

相关文章:

qt的项目结构

目录 创建新的项目 第一个hell0程序&#xff0c;qt的项目结构 main函数 Widget头文件: pro文件 命名规范 QtCreator 常用快捷键 Qt里边绝大部分的类都是继承自QObject是一个顶层类 父子关系 Qt坐标系 QT常用API函数 对象树 信号和槽机制 自定义信号和槽 自定义信号…...

【NLP】文本特征处理:n-gram特征和文本长度规范

文章目录 1、本章目标2、n-gram特征2.1、概念2.2、举个例子2.3、代码 3、文本长度规范及其作用4、小结 &#x1f343;作者介绍&#xff1a;双非本科大三网络工程专业在读&#xff0c;阿里云专家博主&#xff0c;专注于Java领域学习&#xff0c;擅长web应用开发、数据结构和算法…...

ESP32人脸识别开发 ---partitions.csv配置的一些说明(五)

配置的文件在这个位置 esp-who/examples/esp32-s3-eye/partitions.csv factory, app, factory, 0x010000, 4000K, model, data, spiffs, , 3900K, &#xff08;这个是语音相关的&#xff09; nvs, data, nvs, , 16K, fr, data, ,…...

【学习笔记】Matlab和python双语言的学习(图论最短路径)

文章目录 前言一、图论基本概念示例 二、代码实现----Matlab三、代码实现----python总结 前言 通过模型算法&#xff0c;熟练对Matlab和python的应用。 学习视频链接&#xff1a; https://www.bilibili.com/video/BV1EK41187QF?p36&vd_source67471d3a1b4f517b7a7964093e6…...

vue.config.js 配置 devserve 配置

在 Vue CLI 项目中&#xff0c;devServer 配置用于设置开发服务器的行为。这包括了开发服务器的端口、主机名、是否开启 HTTPS、自动打开浏览器等设置&#xff0c;以及配置代理规则来解决跨域问题。 devServer 配置详解(version > 4.0.0) host: 设置开发服务器的主机地址&a…...

不入耳耳机什么牌子性价比高?五大年度必选款揭秘

和传统的入耳式耳机相比&#xff0c;开放式耳机采用的是不深入耳道的设计&#xff0c;佩戴舒适度更高&#xff0c;卫生健康&#xff0c;安全性也更高。同时音质表现也更加有空间感。想要体验开放式耳机带来的便利&#xff0c;就需要做好选购攻略&#xff0c;不入耳耳机什么牌子…...

SQL Zoo 6.The JOIN operation

以下数据均来自SQL Zoo 1.Modify it to show the matchid and player name for all goals scored by Germany. To identify German players, check for: teamid GER.(它以显示德国所有进球的比赛和球员名字,识别德国球员) SELECT matchid,player FROM goal where teamid GE…...

视频教程:Vue3移动端抽屉弹层组件实战

本教程演示了vue3的composition api实现的移动端h5抽屉弹层组件&#xff0c;录屏讲解包含了功能演示和具体的源码实现。 笔者相关教程&#xff1a; 使用tailwindcss轻松实现移动端rem适配Vue3.4双向绑定新特性&#xff1a;defineModel好用爱用 学习要点&#xff1a; 自定义…...

CSS 的 BFC(块级格式化上下文)

BFC是Block Formatting Context&#xff08;块级格式化上下文&#xff09;的缩写&#xff0c;是CSS中一个概念&#xff0c;用于描述页面上如何对元素进行布局。 BFC是一个独立的容器&#xff0c;它内部的元素不会受到外部容器的影响&#xff0c;同时它也会影响其内部元素的表现…...

【2023年】云计算金砖牛刀小试2

A场次题目:Openstack 平台部署与运维 control172.17.31.10compute172.17.31.20 compute任务1 私有云平台环境初始化 1.初始化操作系统 使用提供的用户名密码,登录竞赛云平台。根据表 1 中的 IP 地址规划,设置各服务器节点的 IP 地址,确保网络正常通信,设置控制节点主机名…...

python--将mysql建表语句转换成hive建表语句

1.代码 import json import sys import pymysqldef queryDataBase(tablename):# 连接数据库并查询列信息conn pymysql.connect(userroot, password123456, hosthadoop11)cursor conn.cursor()cursor.execute("SELECT column_name, data_type FROM information_schema.C…...

异步调用实践:Async,Future, TaskExecutor、EventListener

1. 异步调用概述 异步调用允许一个方法调用在不被当前线程阻塞的情况下继续执行&#xff0c;而调用者可以继续执行其他任务&#xff0c;直到异步操作完成。 在Spring Boot中&#xff0c;异步调用常用于提高应用的响应性和吞吐量&#xff0c;尤其是在处理长时间运行的任务时&a…...

Flask 异常处理

Flask 异常处理 使用 app.errorhandler 装饰器使用 app.handle_exception 装饰器使用 register_error_handler调试模式总结 在 Flask 应用中&#xff0c;异常处理是一个非常重要的部分&#xff0c;它可以帮助你管理运行时错误&#xff0c;提供友好的错误页面&#xff0c;以及记…...

【海思SS626 | 内存管理】海思芯片的OS内存、MMZ内存设置

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…...

linux crontab没有按照规则执行排查

配置了cron规则&#xff0c;但是一段时间后任务没有按预期执行&#xff0c;记录一次修复过程 检查crond服务 systemctl status crond规则正常 crontab -l脚本有执行权限 查看日志 第一种&#xff1a;journalctl journalctl -u crond | grep 03:00 -C 3-u 指定crond.serv…...

Cloudflare的D1使用技巧

总文档&#xff1a;https://developers.cloudflare.com/workers/wrangler/commands/#d1查询某个数据库中哪些命令占用资源最大&#xff1a; To find top 10 queries by execution count: npx wrangler d1 insights <database_name> --sort-typesum --sort-bycount --co…...

解决端口号被占用问题

第一种&#xff1a; 最简单有效的方法&#xff0c;重启一下电脑&#xff0c;占用此端口的程序就会释放端口。 第二种&#xff1a; 使用命令找到占用端口的程序&#xff0c;把它关闭。 1、打开运行窗口输入&#xff1a;CMD &#xff0c;进入命令窗口。 2、输入&#xff1a;n…...

如何在linux上部署zabbix监控工具

<1>搭建服务机 1&#xff09;首先我们先执行 sed -i s/SELINUXenforcing/SELINUXdisabled/ /etc/selinux/config ​ #然后我们再把防火墙开机自启关掉 马上生效 systemctl disable --now firewalld 2&#xff09;我们获得rpm包 rpm -Uvh https://mirrors.aliyun.com/…...

vulnhub系列:sp eric

vulnhub系列&#xff1a;sp eric 靶机下载 一、信息收集 nmap扫描存活&#xff0c;根据mac地址寻找IP nmap 192.168.23.0/24nmap扫描端口&#xff0c;开放端口&#xff1a;22、80 nmap 192.168.23.189 -p- -A -sV -Pndirb 扫描目录&#xff0c;.git 源码&#xff0c;admin…...

JVM二:JVM类加载机制

目录 前言 1.什么是类加载? 2.类加载整体流程 3.一个类什么时候被加载? 4.双亲委派模型 4.1 JVM默认提供了三个类加载器 4.1.1 BootstrapClassLoader 4.1.2 ExtensionClassLoader 4.1.3 ApplicationClassLoader 4.2 破坏双亲委派模型 前言 在上一篇文章中&#xf…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

NPOI Excel用OLE对象的形式插入文件附件以及插入图片

static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.

ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #&#xff1a…...

安卓基础(Java 和 Gradle 版本)

1. 设置项目的 JDK 版本 方法1&#xff1a;通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分&#xff0c;设置 Gradle JDK 方法2&#xff1a;通过 Settings File → Settings... (或 CtrlAltS)…...