首页 > 其他分享 >qt的项目结构

qt的项目结构

时间:2024-08-07 14:52:18浏览次数:15  
标签:include 窗口 qt 项目 int 函数 信号 btn 结构

创建新的项目

下一步

下一步

下一步 

下一步

 第一个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 ;

标签:include,窗口,qt,项目,int,函数,信号,btn,结构
From: https://blog.csdn.net/2301_82087113/article/details/140969207

相关文章

  • 数据结构 - 并查集路径压缩
    ......
  • 简单项目部署流程
    本次项目部署至公司内网服务器上,内网IP为192.168.xx.xxx。项目打包:打包前可能要对项目的改动:配置文件中端口号,数据库等信息。​通过Maven的package打包成jar文件,其存放于项目的target文件夹下。将jar包复制到服务器的文件夹中,在其目录中cmd输入命令java-jarxxx.jar保......
  • 【数据结构与算法】删除循环队列中第k个元素的算法 C++实现(循环队列+模运算)
    数组a[MaxSize]用作一个循环队列,front指向循环队列中队头元素的前一个位置,rear指向队尾元素的位置。设计删除队列中第k个元素的算法。思路首先,判断kkk是否在有效范围内......
  • 【数据结构与算法】在循环队列中第k个元素之后插入元素的算法 C++实现(循环队列+模运算
    数组a[MaxSize]用作一个循环队列,front指向循环队列中队头元素的前一个位置,rear指向队尾元素的位置。设计在队列中第k个元素之后插入item的算法。思路首先,检查输入的位置k是否在合理的范围内,即1到queueSize(Q)(包含两端)。如果k在这个范围外,那么返回ERROR。然后,计......
  • linux与windows环境下qt程序打包教程
    一、演示环境qt5.14.2二、Linux2.1关联依赖文件2.1.1下载打包工具在Windows环境下可以使用QtCreator自带的官方工具进行打包,而Linux环境下没有官方工具,需要借助第三方工具才能打包。如:linuxdeployqt、CQtDeployer、AppImageKit,甚至是自己编写shell将依赖导入指定目录......
  • Linux内核学习—— 1内核体系结构
    一内核体系结构1内核模式与体系结构2内核中断概括3进程管理概括二内核源码结构三内核引导程序操作系统结构:用户应用程序操作系统服务层内核(文件系统,内存管理,进程管理,驱动管理)硬件系统驱动操作系统工作方式:把做操作系统从用户态切换到内核态(用户应用程序到内核流......
  • VTK8.0.0编译(Qt 5.14.2+VS2017)
    VTK8.0.0编译(Qt5.14.2+VS2017)本片文章编译VTK8.0.0主要是为了配合PCL1.8.1而编译的,因为PCL1.8.1使用的是VTK8.0版本,但是PCL安装文件夹中提供的VTK8.0不全,和Qt结合使用的时候,会报错。所以还是得自己重新编译。关于Qt和MSVC的安装,可以参考文章(Qt5.14安装(配置MSVC2017))。......
  • 公开讲话恐惧:项目负责人的共同挑战
    公开讲话恐惧:项目负责人的共同挑战前言公开讲话恐惧:项目负责人的共同挑战生理症状:心跳加速、呼吸急促心理症状:预期焦虑与不自信行为表现:准备过度与回避行为不利影响:职业发展与社交障碍克服策略:认识恐惧、积极准备、放松技巧寻求支持与帮助:反馈与专业辅导积累经验与提升自......
  • YoloV9改进策略:注意力机制改进|通过iAFF模块优化RepNBottleneck结构,YoloV9性能飞跃|即
    摘要在深度学习和计算机视觉领域,YoloV9以其卓越的目标检测性能赢得了广泛的关注与应用。为了进一步提升YoloV9的识别精度和鲁棒性,我们创新性地在其核心组件——RepNBottleneck模块中引入了迭代注意力特征融合(iAFF)模块。这一改进不仅实现了显著的涨点效果,还展现了在复杂场景......
  • 塑胶件的结构设计:超声波焊接篇(中)
    04 超声波焊接效果的影响因素一、塑胶材料因素上篇已经介绍的适合超声波焊接的材料选择,一般情况下两种材料满足Tg或熔点接近、化学相容性良好和熔体流动指数接近这三个条件,基本可认为是可焊接的,但需要注意以下几点:1、热塑性塑胶又分为非结晶性(也叫无定形)塑胶和结晶性(或半结晶......