QT 基础知识点

1.基础窗口类QMainWindow qDialog Qwidget

随项目一起创建的窗口基类有三个可选QMainWindow qDialog Qwidget

1.1 Qwidget

是所有窗口的基类,只要是他的子类,或子类的子类,都具有他的属性。

右键项目 Add New -> Qt qt设计师界面类,选择Widget, 写个名字,就可以在项目中添加一个基于窗口的类,此时就多出了ui文件。

如上图就是刚新加的窗口,自动添加的代码如下

#ifndef TESTWIDGET_H
#define TESTWIDGET_H#include <QWidget>namespace Ui {
class testwidget;
}class testwidget : public QWidget
{Q_OBJECTpublic:explicit testwidget(QWidget *parent = nullptr);~testwidget();private:Ui::testwidget *ui;
};#endif // TESTWIDGET_H

没有指定父对象时,新建的窗口是独立于主窗口,带边框的。

如果指定了父对象,就不是独立窗口了,与父窗口绑定了,就不需要show了,父窗口显示时能自动显示子窗口内容,且子窗口是被内嵌到主窗口了,就没边框了,只保留了父类的边框

1.2 QDialog (是Qwidget的子类)

QDialog 是一个对话框类,不能内嵌到父类中,是独立存在的

还是按照上面的方法添加一个QDialog窗口,这里一般选第三个,不带按钮的,如果需要可以自己实现。

添加完新的对话窗口后,在主窗口的构造函数立,new他的对象。

// 再在主要窗口下新建一个对话窗口Dialog* d = new Dialog(); // 一般不用指定父对象,因为他是独立于主窗口的d->show();  // 这种显示为非模态示为非模态

输出效果如下,这个对话框窗口是独立于主窗口的,而且为非模态窗口,焦点可以切换的。

如果换成模态显示他会阻塞程序,直到该对话窗口被关闭,程序才会继续执行。如下图,只显示了对话窗口,主窗口并没有显示,是因为函数阻塞在这了。而且模态窗口不能进行焦点切换的,不能切换页面了,只显示当前页面。

    // 模态显示d->exec();

1.3 QMainWindow(是Qwidget的子类)

 可以包含菜单栏,工具栏。状态栏。也不能内嵌到别窗口,是有自己的边框,独立存在的。

在ui界面 可以右键,进行工具栏菜单栏的删除创建等操作

2. qt中的坐标体系

原点在左上角,即坐标向右递增和向下递增的。子窗口的位置就是基于父窗口的左上角的。多窗口的位置是一个对应一个的。是相对的。move 可以指定控件的位置(相对位置)

move(10, 10);

3. qt内存回收机制

        qt中可以在创建窗口时为其设置父对象。这个就是qt在创建对象时会提供的一个Parent对象指针。目的就是进行资源回收,必须是Qobject类型或者是Qobject的子类,当我们创建对象给他指定父对象,那么父对象在析构的时候就会先把子对象析构。(注意这里的父对象不是继承意义上的父类,是Qt特有的机制)

析构顺序如下:

实现自动回收,必须满足两个条件:

1. 创建对象的类型必须是Qobject类的子类(间接子类也可以)。如Qwidget QDialong等都是Qobject的子类。

2. 创建对象时必须要指定其父对象是谁。如下操作

方法1 通过构造函数
指定这个 parent 
QWidget::QWidget(QWidget* parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags());
QTimer::QTimer(QObject *parent = nullptr);方法2:通过setParent() 指定父对象
void QWidget::setParent(QWidget *parent);
void QWidget::setParent(QObject*parent);

4. QVariant类

        用于包装其他类型的,类似于共用体

4.1 处理基础数据类型

4.2 处理自定义数据类型,如struct类型

使用的时候,需要用宏去声明一下

4. QPoint类

管理坐标的类

5. QLine类

管理直线的类

6. QSize类

设置窗口的大小,设置宽度,高度等

7.  QRect 矩形类

8. QTime

9. 信号槽

9.1 概述

对窗口进行特定的操作,即代表产生了事件,如点击,鼠标移动等,就发出信号,执行对应的动作,这个处理动作就叫做槽函数。二者为两个对象。一个对象发出信号,另一个对象去做处理。

要想实现发送信号,就能触发动作,必须将二者建立联系。connect可以实现连接。

参数为:信号发出者对象,发送信号函数,信号处理者对象,信号处理者函数。回调机制

9.2 标准信号槽

9.3 自定义信号槽

自定义类必须从 QObject或QObject的子类派生,并且在定义类的头文件中必须加入Q_OBJECT宏。定义好信号和槽,需要把他们连接,可以在主窗口中给他们连接起来。

信号只需要声明,不用给他实现定义

信号和槽函数都是返回void类型,都可以重载。参数的类型和个数一般对应。或者槽函数只使用一部分参数。也就是说,槽函数的参数大于信号的参数肯定是错的。

槽函数可以是类的成员函数,全局函数,静态函数,或lambda表达式。

用 emit 发射信号,用发射信号的对象调用它。其实不加也可以,但是这样明显表示这个是信号。

void FlFusionListForm::OnCheckShowDataIndex()
{emit updateShowIndex();emit repaintImage();
}

9.4 一个信号连接多个槽

实现一个信号连接多个槽,只需要对多个槽进行连接即可。并且槽函数的执行是没顺序的。

9.5 信号可与i连接信号

信号连接信号也很简答,可以理解为传递的过程。

QObject::connect(&myObject, &MyClass::mySignal,&myObject, &MyClass::mySlotFunction);

9.6 断开信号与槽的连接

与connect连接参数都一样。

9.7 两种连接方式

connect(m_pMxNaviLogCovertForm,SIGNAL(output_kml_file()), this, SLOT(output_kml_file())); // QT4connect(m_pFlGnssListForm, &SenderClass::updateShowIndex, this, &CurrentClass::updateShowIndex); //qt5

如果槽有重载,需要指定连接的哪个版本。qt4的方式可以传入参数执行对应版本,但是qt5就需要自己声明函数指针。即使这样依然推荐qt5的方式,qt4只是简单的宏替换,存在安全隐患。

10. QWidget函数

几乎所有的 GUI 控件(如按钮、文本框、标签等)都继承自 QWidget,所以他们都可以使用同样的函数。下面列出了部分函数。

10.1 显示和隐藏 

void show();          // 显示窗口
void hide();          // 隐藏窗口
void close();         // 关闭窗口
bool isVisible() const; // 检查窗口是否可见

10.2 窗口大小和位置

void resize(int width, int height); // 设置窗口大小
void move(int x, int y);            // 设置窗口位置
QSize size() const;                 // 获取窗口大小
QPoint pos() const;                 // 获取窗口位置

10.3 窗口标题和图标

void setWindowTitle(const QString& title); // 设置窗口标题
QString windowTitle() const;               // 获取窗口标题
void setWindowIcon(const QIcon& icon);     // 设置窗口图标 图片路径
QIcon windowIcon() const;                  // 获取窗口图标

10.4 事件处理

bool event(QEvent* event); // 处理事件
void paintEvent(QPaintEvent* event); // 绘制事件
void resizeEvent(QResizeEvent* event); // 窗口大小改变事件
void mousePressEvent(QMouseEvent* event); // 鼠标按下事件
void keyPressEvent(QKeyEvent* event); // 键盘按下事件

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[漏洞篇]文件上传漏洞详解

[漏洞篇]文件上传漏洞详解 一、介绍 1. 概念 文件上传漏洞是指用户上传了一个可执行的脚本文件&#xff0c;并通过此脚本文件获得了执行服务器端命令的能力。这种攻击方式是最为直接和有效的&#xff0c;“文件上传” 本身没有问题&#xff0c;有问题的是文件上传后&#xf…

Grok 3与GPT-4.5的“智能天花板”争夺战——谁才是大模型时代的算力之王?

2025年2月18日&#xff0c;马斯克旗下 xAI 高调发布新一代大模型Grok 3&#xff0c;号称“地球上最聪明AI”&#xff0c;在数学推理、代码生成等核心能力上碾压 GPT-4o、DeepSeek-V3 等对手。而就在同一天&#xff0c;OpenAI创始人 Sam Altman 暗示 GPT-4.5 即将登场&#xff0…

ubuntu新系统使用指南

1. 更新源 2. 配置rime 输入法 sudo apt install ibus-rimeibus-setup #打开配置界面添加雾凇拼音 cd ~/Documents/Tool/input_source/plumgit clone --depth 1 https://github.com/rime/plum plum #没有梯子就劝退cd plum/bash rime-install iDvel/rime-ice:others/recipe…

C#贪心算法

贪心算法&#xff1a;生活与代码中的 “最优选择大师” 在生活里&#xff0c;我们常常面临各种选择&#xff0c;都希望能做出最有利的决策。比如在超市大促销时&#xff0c;面对琳琅满目的商品&#xff0c;你总想用有限的预算买到价值最高的东西。贪心算法&#xff0c;就像是一…

3、Kubernetes 集群部署 Prometheus 和 Grafana

Kubernetes 集群部署 Prometheus 和 Grafana node-exporter 安装Prometheus 安装和配置Prometheus 配置热加载Grafana 安装部署Grafana 配置 实验环境 控制节点/master01 192.168.110.10 工作节点/node01 192.168.110.20 工作节点/node02 192.168.110.30 node-exporter 安装 #…

MySQL中Binlog Redolog Undolog区别?

MySQL中Binlog Redolog Undolog区别 在学习MySQL数据库管理和优化的过程中&#xff0c;理解和区分Binlog&#xff08;二进制日志&#xff09;、RedoLog&#xff08;重做日志&#xff09;和UndoLog&#xff08;撤销日志&#xff09;是至关重要的。这三种日志在MySQL中扮演着不同…

C++中结构体与结构体变量 和 类与对象的区别

具体区别如下&#xff1a; 结构体 -> 结构体变量 { 结构体&#xff1a;struct student{ 具体是多少&#xff0c;年龄&#xff0c;名字&#xff0c;性别&#xff0c;成绩 } 结构体变量&#xff1a; stu{ 名字&#xff1a;张三&#xff0c;年龄&#xff1a;18&#…

小迪安全23-php后台模块

cookie技术 cookie就是身份验证表示&#xff0c;通过cookie好区分每个用户的个人数据和权限&#xff0c;第一次登陆之后正常的网站都会赋予一个cookie 写写一个后台界面&#xff0c;直接让ai去写就可以 然后自己需要的提交方式&#xff0c;和表单值自己修改即可 生成cookie的…

(面试经典问题之连接池篇)连接池构成、作用及其基本原理详解

一、什么是连接池 连接池一般指的是数据库连接池&#xff08;connection pooling&#xff09;&#xff0c;是指程序启动时建立足够的数据库连接&#xff0c;并将这些连接组成一个连接池&#xff0c;由程序动态的对池中的连接进行申请&#xff0c;使用&#xff0c;释放&#xf…

Java+SpringBoot+Vue+数据可视化的综合健身管理平台(程序+论文+讲解+安装+调试+售后)

感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;我会一一回复&#xff0c;希望帮助更多的人。 系统介绍 在当今社会&#xff0c;随着人们生活水平的不断提高和健康意识的日益增强&#xff0c;健…

echarts找不到了?echarts社区最新地址

前言&#xff1a;在之前使用echarts的时候&#xff0c;还可以通过上边的导航栏找到echarts社区&#xff0c;但是如今的echarts变更之后&#xff0c;就找不到echarts社区了。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客 如今…

Jenkins 配置 Credentials 凭证

Jenkins 配置 Credentials 凭证 一、创建凭证 Dashboard -> Manage Jenkins -> Manage Credentials 在 Domain 列随便点击一个 (global) 二、添加 凭证 点击左侧 Add Credentials 四、填写凭证 Kind&#xff1a;凭证类型 Username with password&#xff1a; 配置 用…

【Nacos】从零开始启动Nacos服务(windows/linux)

文章目录 前言前置条件官方网址一、Nacos下载1.1 选择Nacos版本1.2 下载 二、解压2.1 解压到某个文件夹 三、 启动3.1 方式一&#xff1a;直接使用命令启动3.1.1 进入bin文件夹3.1.2 进入命令行工具3.1.3 执行命令 3.2 方式二&#xff1a;修改配置文件后启动3.2.1 修改启动脚本…

Microsoft 365 Copilot中使用人数最多的是哪些应用

今天在浏览Microsoft 365 admin center时发现&#xff0c;copilot会自动整理过去30天内所有用户使用copilot的概况&#xff1a; 直接把这个图丢给copilot让它去分析&#xff0c;结果如下&#xff1a; 总用户情况 总用户数在各应用中均为 561 人&#xff0c;说明此次统计的样本…

AI学习第一天-什么是AI

AI的发展可以被分为四次浪潮&#xff0c;这包括符号主义、机器学习与神经网络&#xff0c;以及深度学习。在这些发展中&#xff0c;深度学习凭借其在处理非结构化复杂数据、强大的学习能力和可解释性方面的优势备受关注。深度学习技术的应用不仅提升了AI系统的性能&#xff0c;…

计算机视觉:经典数据格式(VOC、YOLO、COCO)解析与转换(附代码)

第一章&#xff1a;计算机视觉中图像的基础认知 第二章&#xff1a;计算机视觉&#xff1a;卷积神经网络(CNN)基本概念(一) 第三章&#xff1a;计算机视觉&#xff1a;卷积神经网络(CNN)基本概念(二) 第四章&#xff1a;搭建一个经典的LeNet5神经网络(附代码) 第五章&#xff1…

解决本地模拟IP的DHCP冲突问题

解决 DHCP 冲突导致的多 IP 绑定失效问题 前言 续接上一篇在本机上模拟IP地址。 在实际操作中&#xff0c;如果本机原有 IP&#xff08;如 192.168.2.7&#xff09;是通过 DHCP 自动获取的&#xff0c;直接添加新 IP&#xff08;如 10.0.11.11&#xff09;可能会导致 DHCP 服…

安全生产月安全知识竞赛主持稿串词

女:尊敬的各位领导、各位来宾 男:各位参赛选手、观众朋友们 合:大家好&#xff5e; 女:安全是天&#xff0c;有了这一份天&#xff0c;我们的员工就会多一份幸福&#xff0c; 我们的企业就会多一丝光彩。 男:安全是地&#xff0c;有了这一片地&#xff0c;我们的员工就多了一…

JDBC学习

背景&#xff1a;主机正在运行mysql服务 在cmd输入 mysql -u root -p 之后&#xff0c;输入密码&#xff08;我的用户名是root&#xff0c;密码是root&#xff09;&#xff0c;成功登录到mysql。 输入&#xff1a;SHOW GLOBAL VARIABLES LIKE port; 检查mysql服务的端口号 …

前端js进阶,ES6语法,包详细

进阶ES6 作用域的概念加深对js理解 let、const申明的变量&#xff0c;在花括号中会生成块作用域&#xff0c;而var就不会生成块作用域 作用域链本质上就是底层的变量查找机制 作用域链查找的规则是:优先查找当前作用域先把的变量&#xff0c;再依次逐级找父级作用域直到全局…