c++之QT

2023-11-11

Qt入门(C++)

1.Qt的优势:

1.跨平台,几乎支持所有的平台

2.接口简单,容易上手,学习QT框架对学习其他框架有参考意义

3.一定程度上简化了内存回收机制 (特定场景下会帮助释放内存)

4.开发效率高,能够快速的构建应用程序。

5.可以进行嵌入式开发

2.展示一个窗口

#include <iostream>
#include <QApplication>
#include <QWidget>

using namespace std;

int main(int argc, char *argv[]) {
    //创建Application对象
    QApplication app(argc, argv);
    //创建窗口
    QWidget w;
    //展示窗口
    w.show();

    //等待窗口关闭,程序结束
    return QApplication::exec();
}

3.Qt中的内存问题

Qt对象的父子关系:

QT最基础和核心的类是:QObjectQ…Object内部有一个list,会保存children,还有一个指针保存parent当自己析构时,会自己从parent列表中删除并且析构所有的children。

Qt的半自动化内存管理:

1、QObject及其派生类的对象,如果其parent非0,那么其parent析构时会析构 该对象。 2、QWidget及其派生类的对象,可以设置 Qt::WA_DeleteOnClose 标志位(当close时会析构该对象)。

attention:

父子关系:父对象、子对象、父子关系。这是Qt中所特有的,与类的继承关系无关,传递参数是与parent有关(基类、派生类,或父类、子类,这是对于派生体系来说的,与parent无关)

//main.cpp
#include <iostream>
#include <MainWindow.h>
#include <QApplication>

using namespace std;

int main(int argc, char *argv[]) {
    //创建Application对象
    QApplication app(argc, argv);
    //创建窗口对象
    MainWindow w;
     //设置窗口大小
    w.resize(500, 500);
    //显示窗口
    w.show();
    //窗口关闭后退出
    return QApplication::exec();
}

//MainWindow.cpp
#include "MainWindow.h"
#include <QWidget>

MainWindow::MainWindow(QWidget *parent) : QWidget(parent) {
    auto *button = new QPushButton;
    button->setText("按钮");
    button->setParent(this);
//      QPushButton *button = new QPushButton("按钮",this);
}

MainWindow::~MainWindow() = default;


//MainWindow.h
#ifndef BTN_MAINWINDOW_H
#define BTN_MAINWINDOW_H

#include <iostream>
#include <QWidget>
#include <QtWidgets/QPushButton>
using namespace std;
#include <QDebug>

class MainWindow : public QWidget {
public:
    explicit MainWindow(QWidget *parent = nullptr);

    ~MainWindow() override;

};
#endif //BTN_MAINWINDOW_H

4.信号和槽函数

1.信号和槽机制是 QT 的核心机制,它是一种高级接口,应用于对象之间的通信,它是 QT 的核心特性.

2.信号和槽机制:

2.1信号和槽是用来在对象间传递数据的方法:当一个特定事件发生的时候,signal会被emit出来,slot调用是用来响应相应的signal.

2.2Qt中对象已经包含了许多预定义的 signal(基本组件都有各自特有的预定义的信号),Qt的对象中也已经包含了许多预定义的槽函数.

信号:

当对象的状态发生改变的时候,信号就由该对象发射 (emit) 出去

当一个信号被发射(emit),与其关联的槽函数被立刻执行,发射该信号的对象并不知道是那个对象在接收这个信号。这样保证了对象与对象之间的低耦合。

如果信号和多个槽函数相关联,当信号被发射时,这些槽的执行顺序将会是随机的、不确定的。

槽:

用于接受信号,而且槽只是普通的成员函数。当和槽连接的信号被发射时,槽会被调用。一个槽并不知道是否有任何信号与自己相连接。

信号和槽的绑定:

通过调用 QObject 对象的 connect 函数来将对象的信号与另外一个对象的槽函数相关联,当发射者发射信号时,接收者的槽函数将被调用

5窗口中添加一个按钮,点击按钮,窗口关闭

//MainWindow.cpp
MainWindow::MainWindow(QWidget *parent) : QWidget(parent) {
    auto *button = new QPushButton;
    button->setText("按钮");
    button->setParent(this);
    //信号和槽函数建立连接connect
    //参数1:发送信号者,参数2:传递的信号,信号3:接收信号者,参数4:槽函数
    connect(button,&QPushButton::clicked,QApplication::instance(),&QApplication::quit);
//      QPushButton *button = new QPushButton("按钮",this);
}

MainWindow::~MainWindow() = default;

在这里插入图片描述

qt项目的CMakeLists.txt的编写规则:

#cmake版本
cmake_minimum_required(VERSION 3.5.1)

#项目名称
project(LSPointCloudView)

#让cmake自动去寻找Qt5
FIND_PACKAGE(Qt5 COMPONENTS Widgets Network REQUIRED)
FIND_PACKAGE(PCL REQUIRED)
FIND_PACKAGE(Eigen3 REQUIRED)
FIND_PACKAGE(VTK REQUIRED)


#采用C++11标准
set(CMAKE_CXX_STANDARD 11)

#添加所有的源文件
file(GLOB LSPointCloudView_SOURCES ${PROJECT_SOURCE_DIR}/*.cpp )
#SET(LSPointCloudView_SOURCES
#   *.cpp
#)

#message("source file: ",${PROJECT_SOURCE_DIR})
#message("source file: ",${LSPointCloudView_SOURCES})
#添加所有的头文件
file(GLOB LSPointCloudView_HEADERS ${PROJECT_SOURCE_DIR}/*.h )
#SET(LSPointCloudView_HEADERS 
#*.h
#)

#添加所有的.ui文件
file(GLOB LSPointCloudView_FORMS ${PROJECT_SOURCE_DIR}/*.ui )
#SET(LSPointCloudView_FORMS 
#*.ui
#)

#添加资源文件
file(GLOB LSPointCloudView_RESOURCES ${PROJECT_SOURCE_DIR}/*.qrc )
#SET(LSPointCloudView_RESOURCES 
#	*.qrc
#)
#调用预编译器moc,需要使用 QT5_WRAP_CPP宏
QT5_WRAP_CPP(LSPointCloudView_HEADERS_MOC ${LSPointCloudView_HEADERS})
#使用uic处理.ui文件
QT5_WRAP_UI(LSPointCloudView_FORMS_HEADERS ${LSPointCloudView_FORMS})
#使用rcc处理.qrc文件
QT5_ADD_RESOURCES(LSPointCloudView_RESOURCES_RCC ${LSPointCloudView_RESOURCES})

#这些生成的中间文件都会在build目录下,这样的话,编译器则不能定位由uic程序产生的诸如_ui_mainwindow.h等文件。所以,我们需要把build目录添加到包含目录中
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})

#pcl
include_directories(${PCL_INCLUDE_DIRS})
# 设置依赖库链接目录
link_directories(${PCL_LIBRARY_DIRS})
# 添加预处理器和编译器标记
add_definitions(${PCL_DEFINITIONS})


#eigen3
include_directories(${EIGEN3_INCLUDE_DIR})

#vtk
include_directories(${VTK_INCLUDE_DIRS})
link_directories(${VTK_LIBRARY_DIRS})


#生成可执行文件
ADD_EXECUTABLE(LSPointCloudView 
	${LSPointCloudView_SOURCES} 
	${LSPointCloudView_HEADERS_MOC} 
        ${LSPointCloudView_FORMS_HEADERS}
	${LSPointCloudView_RESOURCES_RCC} 
)

#为target添加需要链接的共享库
TARGET_LINK_LIBRARIES(LSPointCloudView ${Qt5Widgets_LIBRARIES} ${PCL_LIBRARIES} ${VTK_LIBRARIES} -lpcap -lpthread)


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++之QT 的相关文章

  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • BASIC 中的 C 语言中的 PeekInt、PokeInt、Peek、Poke 等效项

    我想知道该命令的等效项是什么Peek and Poke 基本和其他变体 用 C 语言 类似PeekInt PokeInt 整数 涉及内存条的东西 我知道在 C 语言中有很多方法可以做到这一点 我正在尝试将基本程序移植到 C 语言 这只是使用
  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • Qt 支持 Windows 蓝牙 API 吗?

    谁能告诉我 Qt 是否支持 Windows 蓝牙 API 如果是这样 您能否分享一些有关如何使用它的信息 自上次答复以来 这个问题的答案发生了一些变化 Qt 5 2 版为 Linux BlueZ 和 BlackBerry 设备实现了蓝牙 A
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri

随机推荐

  • 红队隧道应用篇之Frp内网穿透(十)

    简介 Frp工具下载地址 https github com fatedier frp releases Frp可将处于防火墙或内网后的主机对外网提供http https tcp或udp等服务 例如在虚拟机做个frp内网穿透 在其他主机访问其
  • android gpuimage显示的缩放和剪裁模式

    原文 http blog csdn net u011270282 article details 51505755 在gpuimagerender里面有如下方法 GPUImage ScaleType CENTER CROP表示剪裁 可以修改
  • python二级题库 第四套 附刷题软件

    刷 题软件 模拟python二级考试 操作题刷题软件 公众h 露露IT 回复 python二级 一 选择题 1 描述数据库系统中全局数据逻辑结构 且为全体用户公共数据视图的是 A 概念模式 B 外模式 C 内模式 D 中间模式 解析 本题考
  • 使用yt_dlp下载油管视频

    yt dlp工具是一个开源的项目 项目地址 https github com yt dlp yt dlp 下载地址 https github com yt dlp yt dlp releases 查看支持的下载格式 yt dlp F htt
  • ztree中获取某节点的所有叶子节点

    var setting data simpleData enable true callback onClick treenodeClick function treenodeClick event treeId treeNode clic
  • vue数据双向绑定模型

    记录vue的数据双向绑定模型的常见的问题
  • 英文输入法

    注意 答案仅作为参考 实际考试中下列代码通过用例100 但不代表最优解 主管期望你来实现英文输入法单词联想功能 需求如下 依据用户输入的单词前缀 从已输入的英文语句中联想出用户想输入的单词 按字典序输出联想到的单词序列 如果联想不到 请输出
  • 微软 Office 中的零日漏洞: “ Follina”将在宏被禁用时工作

    信息安全网的研究人员在微软无处不在的 Office 软件中发现了一个零日代码执行漏洞 这个被称为 Follina 的漏洞已经流传了一段时间 网络安全研究员 Kevin Beaumont 追溯到4月12日微软的一份报告 并使用 Office
  • 深入理解Java虚拟机jvm-永久代(Permanent Generation)

    永久代 jdk6及以前 jdk7 jdk8 方法区 Method Area 与Java堆一样 是各个线程共享的内存区域 它用于存储已被虚拟机加载的类型信息 常量 静态变量 即时编译器编译后的代码缓存等数据 它和堆在逻辑上是连续的 但在物理上
  • Kubernetes (k8s) v1.19.0 安装部署,单机部署

    系统准备 环境准备 部署集群没有特殊说明均使用root用户执行命令 硬件信息 k8s master 内存16GB 硬盘20GB k8s 控制节点 Node节点 软件信息 CentOS Linux release 7 6 1810 Core
  • eclipse中server->runtime environment中没有出现jre

    一层层找 Windows gt server gt runtime environments 点击Edit 再点击installed JREs 再选中点击edit 选择自己电脑中jre的文件路径修改即可
  • 高通Vuforia+Unity——实现简单的AR功能

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 一 什么是AR 增强现实 Augmented Reality 简称AR 是一种将计算机生成的虚拟物体 场景或者系统提示信息叠加到真实场景中 从而时实现对现实的增强的一种技术
  • 锐捷防火墙(WEB)——VPN部署场景—VPN技术介绍

    目录 IPSec简介 应用场景 IPSEC VPN原理简介 数字证书原理简介 预共享密钥与数字证书的区别 主模式与野蛮模式的区别 SSL VPN简介 应用场景 SSL VPN原理简介 SSL VPN有三种工作模式 GRE简介 应用场景 功能
  • 【SLAM】libQGLViewer:VS 2019 + Qt 5.14.2 + Win 10 配置

    libQGLViewer 2 7 2 VS 2019 Qt 5 14 2 Win 10 配置 注意 这次配置没有完全成功 编译25个成功 一个失败 失败的是 qglviewerplugin qglviewerplugin 是一个可选控件 不
  • 数据倾斜的思路分析+map端join实现+倒排索引实现

    1什么是数据倾斜 解决解决方法 1让数据数据不要去reduceTask 在mapTask就进行处理 利用distributeCache map端join实现 public class MapSideJoin public static cl
  • 在ubuntu上安装ns2和nam(ubuntu16.04)

    在ubuntu上安装ns2和nam 版本选择 安装ns2 安装nam 版本选择 首先 版本的合理选择可以让我们避免很多麻烦 经过测试 ubuntu的版本选择为ubuntu16 04 ns2的版本选择为ns 2 35 nam包含于ns2 资源
  • MQTT.js 入门教程

    简介 MQTT js 是一个开源的 MQTT 协议的客户端库 使用 JavaScript 编写 主要用于 Node js 和 浏览器环境中 是目前 JavaScript 生态中使用最为广泛的 MQTT 客户端库 MQTT 是一种基于发布 订
  • .shp格式全国基础数据(公路、铁路、水系、国界、省界等)

    地级行政界线 zip 431 86 KB 下载次数 347 国界 zip 844 03 KB 下载次数 427 国界与省界 zip 1 11 MB 下载次数 366 三界以上河流 zip 1 42 MB 下载次数 370 首都和省级行政中心
  • [原创]Heroku 简单部署指南

    1 设置 1 1 环境依赖 1 2 Heroku 客户端安装 1 3 登录 2 应用 2 1 创建 2 2 查看日志 2 3 附加组件 2 4 交互式 Shell 2 5 定义 配置变量 2 6 配置数据库 2 7 Procfile 该部署
  • c++之QT

    Qt入门 C 1 Qt的优势 1 跨平台 几乎支持所有的平台 2 接口简单 容易上手 学习QT框架对学习其他框架有参考意义 3 一定程度上简化了内存回收机制 特定场景下会帮助释放内存 4 开发效率高 能够快速的构建应用程序 5 可以进行嵌入