Qt中的一些功能相似类总结

Qt 中 QButtonGroup 使用总结 阅读详情

Qt中有些功能很相似的类,下面整理汇总:

1.QActionGroup、QButtonGroup、QGraphicsItemGroup

     这几个Group结尾的类都是对某个对象进行分组管理,功能很类似。

1.1.QActionGroup

  QActionGroup类用来将菜单中的子菜单(QAction)分组。具体参见《QActionGroup类使用》。

1.2.QButtonGroup

QButtonGroup用于对多个按钮分组管理。具体参见《Qt 中QButtonGroup 的用法》、《QButtonGroup用法》。

1.3.QGraphicsItemGroup

QGraphicsItemGroup用于视图场景中的QGraphicsItem项进行分组管理。

  • QGraphicsItemGroup 是一种特殊类型的复合项,它将自身及其所有子项视为一个项(即所有子项的所有事件和几何图形都合并在一起)。当想要将几个较小的图形项组合成一个大图形项以简化项目的移动和复制时可以使用项目组。
  • 如果只想将图形项存储在其他图形项中,应该通过将合适的父项传递给 setParentItem() 来直接使用任何 QGraphicsItem而不是使用QGraphicsItemGroup。
  • QGraphicsItemGroup 的 boundingRect() 函数返回项组中所有项的边界矩形。 QGraphicsItemGroup 忽略其子项上的 ItemIgnoresTransformations 标志(图形项将忽略继承的转换)。
  • 将项目列表传递给 QGraphicsScene::createItemGroup((const QList<QGraphicsItem *> &items),它返回一个新的 QGraphicsItemGroup 图形项。
  • 构造一个 QGraphicsItemGroup 项,调用 QGraphicsScene::addItem() 将其添加到场景中,然后通过调用 addToGroup() 将项目添加到组中。
  • 要拆除(“取消分组”)一个项目组,可以调用 QGraphicsScene::destroyItemGroup(),或者调用 removeFromGroup() 从组中删除所有项目。

示例

常用的软件,例如:XMind、Visio 都有分组功能。下面,我们实现一个简单的分组,利用一个直线(链接线)将椭圆和矩形连接起来。

 源码如下:

// 构造 group、椭圆、直线、矩形
QGraphicsItemGroup *pGroup = new QGraphicsItemGroup();
QGraphicsEllipseItem *pFrom = new QGraphicsEllipseItem();
QGraphicsLineItem *pLink = new QGraphicsLineItem();
QGraphicsRectItem *pTo = new QGraphicsRectItem();
 
// 设置 group 可选中、可移动
pGroup->setFlags( QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsMovable);
 
// 设置样式(画笔 - 边框色 画刷 - 背景色)
QPen pen = pFrom->pen();
pen.setWidth(2);
pen.setColor(QColor(0, 160, 230));
pFrom->setPen(pen);
pLink->setPen(pen);
pTo->setPen(pen);
pFrom->setBrush(QColor(247, 160, 57));
pTo->setBrush(QColor(247, 160, 57));
 
// 将 item 添加至 group
pGroup->addToGroup(pFrom);
pGroup->addToGroup(pTo);
pGroup->addToGroup(pLink);
 
// 设置椭圆、矩形区域
const double length = 50;
pFrom->setRect(QRectF(-length/2.0, -length/2.0, length, length));
pTo->setRect(QRectF(-length/2.0, -length/2.0, length, length));
 
// 设置椭圆、矩形、连接线坐标
pFrom->setPos(80, 80);
pTo->setPos(200, 150);
pLink->setLine(QLineF(pFrom->pos(), pTo->pos()));
 
// 将 group 添加至场景中
QGraphicsScene *pScene = new QGraphicsScene();
pScene->setSceneRect(0, 0, 300, 200);
pScene->addItem(pGroup);
 
// 为视图设置场景
QGraphicsView *pView = new QGraphicsView();
pView->setRenderHint(QPainter::Antialiasing);
pView->setScene(pScene);
pView->show();

注意: QGraphicsItem 分组比较简单,但在分组之后 group 中的 QGraphicsItem 无法捕获自己的相关事件(例如:鼠标事件、键盘事件),实际接受消息对象为 QGraphicsItemGroup。处理方式请参见:让QGraphicsItemGroup中的item处理自己的事件。

2.QGraphicsProxyWidget、QWidget

2.1.QGraphicsProxyWidget

  • QGraphicsProxyWidget 类提供了一个代理层,用于在 QGraphicsScene 中嵌入 QWidget。
  • QGraphicsProxyWidget 在两个对象之间转发事件,并在 QWidget 的基于 int 的几何坐标和 QGraphicsWidget 的基于 qreal 的几何坐标之间进行转换。
  • QGraphicsProxyWidget 支持 QWidget 的几乎所有核心功能,包括Tab切换焦点、键盘输入、拖放和弹出窗口等。
  • QGraphicsProxyWidget 通过为每个弹出窗口创建子代理来处理嵌入式小部件的弹出窗口子项。这意味着当嵌入的 QComboBox 显示其弹出列表时,会自动创建一个新的 QGraphicsProxyWidget,嵌入弹出窗口并正确定位。

有两种使用 QGraphicsProxyWidget 嵌入小部件的方法:

1、将小部件指针与任何相关的 Qt::WindowFlags 一起传递给 QGraphicsScene::addWidget()。此函数返回一个指向 QGraphicsProxyWidget 的指针。例:

    QGroupBox *groupBox = new QGroupBox("group");
    QLabel *numberLabel = new QLabel("lable");
    QLineEdit *numberEdit = new QLineEdit;
 
    QFormLayout *layout = new QFormLayout;
    layout->addRow(numberLabel, numberEdit);
    groupBox->setLayout(layout);
 
    QGraphicsProxyWidget *proxy = gphs->addWidget(groupBox);
    proxy->setPos(100,100);

2、创建一个 QGraphicsProxyWidget 项,然后调用 setWidget() 来嵌入QWidget。widget() 函数返回一个指向嵌入小部件的指针。QGraphicsProxyWidget 与 QWidget 共享所有权,因此两者中的任何一个被销毁,另一也将自动销毁。

    QGroupBox *groupBox = new QGroupBox("group");
    QLabel *numberLabel = new QLabel("lable");
    QLineEdit *numberEdit = new QLineEdit;
 
    QFormLayout *layout = new QFormLayout;
    layout->addRow(numberLabel, numberEdit);
    groupBox->setLayout(layout);
 
    QGraphicsProxyWidget *proxy = new QGraphicsProxyWidget;
    proxy->setWidget(groupBox);
    gphs->addItem(proxy);
    proxy->setPos(100,100);

1、2两种方法运行结果如下:

 QGraphicsProxyWidget 保持其状态与嵌入的小部件同步。例如,如果代理被隐藏或禁用,则嵌入的小部件也将被隐藏或禁用,反之亦然。

注意事项

1、场景将嵌入的小部件保持在特殊状态,以防止它在嵌入小部件时干扰其他小部件。在这种状态下,小部件的行为可能与未嵌入时的行为略有不同。

2、提供此类是为了 QWidgets 和 QGraphicsItems 桥接方便,不应将其用于高性能场景。

2.2.QWidget

这个就不说了,学Qt的都应该对这个类很熟练了。

3.QLayout、QGraphicsLayout

.QLayout或QLayout子类及QGraphicsLayout或QGraphicsLayout子类有类似功能。.QLayout或QLayout子类是对QWidget、QLayoutItem进行布局;QGraphicsLayout或QGraphicsLayout子类有是对QGraphicsLayoutItem、QGraphicsItem进行布局。

4. QWidget::event和QGraphicsItem::sceneEvent


    前者是对发向QWidget中的所有事件进行处理的函数,后者是对发向场景/视图/项框架中的项中的事件进行处理的函数。它们都可以在该函数对发向自己的事件如:鼠标事件、关闭事件、键盘事件、显示隐藏事件、手势事件等Qt中的各种事件进行处理。

QT相同控件相似功能 QT多控件 阅读详情

相关推荐

QT6学习第八天 QFrame 类

QAbstractSpinBox 类时一个抽象基类,提供了一个数值设定框和一个行编辑器来显示设定值。它有三个子类,QDateTimeEdit、QSpinBox、QDoubleSpinBox,分别用来完成日期时间、整数和浮点数的设定。创建一个Qt Widget 项目,命名myspinbox,基类为 QWidget,类名MyWidgetQDateTimeEdit类提供了一个可以编辑日期和时间的部件。

qq_15409121的博客 1444

Qt图形视图框架:QGraphicsItemGroup

一、描述 1、QGraphicsItemGroup 是一种特殊类型的复合项,它将自身及其所有子项视为一个项(即所有子项的所有事件和几何图形都合并在一起)。当想要将几个较小的图形项组合成一个大图形项以简化项目的移动和复制时可以使用项目组。 2、如果只想将图形项存储在其他图形项中,应该通过将合适的父项传递给 setParentItem() 来直接使用任何 QGraphicsItem而不是使用QGraphicsItemGroup。 3、QGraphicsItemGroup 的 boundingRect()

友善啊,朋友的博客 6504

Qt是什么?有哪些优势用于图形界面开发

什么是Qt? Qt是用于台式机,嵌入式和移动设备的跨平台应用程序开发框架。支持的平台包括Linux,OS X,Windows,VxWorks,QNX,Android,iOS,BlackBerry,Sailfish OS等。 Qt本身不是一门编程语言。它是一个用C++编写的框架。一个预处理器,MOC(Meta-Object Compiler,元对象编译器),被用来扩展C++语言的功能,比如信号和插槽。在编译步骤之前,MOC解析用Qt-extended C++编写的源文件,并从中生成符合标准的C++源文件。

qq_42444778的博客 1万+

图形视图(11):【类】QGraphicsItemGroup [官翻]

文章目录详述公共类型enum anonymous公共函数构造析构添加删除项目重写的公共函数演示代码 QGraphicsItemGroup 类 QGraphicsItemGroup类提供了一个容器,该容器将一组项目视为一个项目。 Header: #include < QGraphicsItemGroup > qmake: QT += widgets Inherits: QGraphicsItem Inherited By: Since: Qt 4.2 详述

读书笔记 3160

浅谈C++中的多线程(三):Qt中的多线程应用

本篇文章围绕以下几个问题展开: 何为进程?何为线程?两者有何区别? 何为并发?C++中如何解决并发问题?C++中多线程的语言实现? 同步互斥原理以及多进程和多线程中实现同步互斥的两种方法 Qt中的多线程应用 前三个问题已经在之前两篇文章中讲解,本篇文章作为结尾篇来讲解最后一个问题:Qt中的多线程应用。 四.Qt中的多线程应用 1.引入 程序由单线程到多线程,就像以前是一个人干...

Eason_Grace的博客 8202

QT中QButtonGroup的使用

一、QButtonGroup 简介 QButtonGroup 继承自 QObject,不是一个可视类,它主要是对按键进行分组,便于按键管理。 二、QButtonGroup 样例 mainwindows.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QButtonGroup> #include <QVBoxLayout> class MainWindow : pub

啊渊的专栏 5868

从Qt到PyQt

Hello World PyQt与Qt具有极其相似的类族和API,而且不再使用qmake系统和Q_OBJECT宏使得PyQt在没有编译链接时频繁的错误而且代码更加友好。 from PyQt4 import QtCore, QtGui import sys if __name__ == '__main__': app = QtGui.QApplication(sys.argv); ...

weixin_30877755的博客 183

QT中QActionGroup类的用法

这意味着,在该QActionGroup对象中,只允许一个QAction对象被选中。在上面的代码中,我们首先创建了一个QActionGroup对象,然后将需要组合的QAction对象action1、action2和action3添加到该对象中。在上面的代码中,我们通过调用checkedAction()函数来获取选中的QAction对象,并将其保存在checkedAction变量中。在上面的代码中,我们创建了一个MyWidget类,该类包含三个QAction对象和一个QActionGroup对象。

ByteNinja的博客 388

QT中indexOf函数说明

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

JustHaveBin的博客 1万+

Qt中的绘图功能与Matlab的相似之处及源代码实现

通过学习和掌握Qt中的绘图操作,我们可以在自己的应用程序中实现类似Matlab的绘图效果,展示数据和结果。希望以上内容对你有所帮助!本文将介绍Qt中的图形绘制功能,并通过提供相应的源代码来说明如何在Qt中实现类似Matlab的绘图效果。除了基本的绘图功能,Qt还提供了更丰富的绘图类和函数,例如QChart、QPlot等,可以实现更复杂和专业的绘图效果。要在Qt中实现类似Matlab的绘图效果,我们首先需要创建一个自定义的QWidget派生类,重写它的绘图事件paintEvent。

带你成为别人眼中的大佬! 336

学习笔记7--激光雷达标定

本系列博客包括6个专栏,分别为:《自动驾驶技术概览》、《自动驾驶汽车平台技术基础》、《自动驾驶汽车定位技术》、《自动驾驶汽车环境感知》、《自动驾驶汽车决策与控制》、《自动驾驶系统设计及应用》,笔者不是自动驾驶领域的专家,只是一个在探索自动驾驶路上的小白,此系列丛书尚未阅读完,也是边阅读边总结边思考,欢迎各位小伙伴,各位大牛们在评论区给出建议,帮笔者这个小白挑出错误,谢谢! 此专栏是关于《自动驾驶汽车环境感知》书籍的笔记。 2.激光雷达标定 2.1 概述 激光雷达内参标定:内部激光发射器坐标系与雷达本

FUXI_Willard 8027

QT跨平台应用程序开发框架(2)—— 初识QT

目录一,创建helloworld1.1 通过图形化1.2 通过代码1.3 通过编辑框1.4 使用按钮二,对象树2.1 关于对象树2.2 演示释放流程三,乱码问题3.1 为什么会有乱码问题3.2 解决乱码问题四,认识Qt坐标系五,周边5.1 命名规范5.2 快捷键5.3 如何使用帮助文档先双击 .ui 文件来到图形化编辑页面:然后就会在页面的右上方显示我们安装的控件:最后我们点击左下角运行按钮,我们创建的窗口上就会显示一个hello world字符串之后我们就可以往label对象里面设置一个文本:之后直接运行

aaqq800520的博客 2191

baostock实战:如何用Python批量下载多只股票的历史数据(含常见错误排查)

本文详细介绍了如何使用Python和baostock库批量下载多只股票的历史数据。内容涵盖从环境搭建、代码标准化到构建稳健的批量下载框架的全过程,并重点提供了高级错误处理、网络重试、数据验证及内存管理等实战解决方案,帮助用户高效构建股票数据处理流水线。

nice1的博客 1081

QT跨平台应用程序开发框架(3)—— 信号和槽

有时候Qt内置的信号和槽可能无法满足我们的需求,所以我们可以自己实现信号和槽,我们先说自定义槽我们上篇文章已经用自定义槽实现了按按钮切换按钮里的文本:所以所谓的槽函数,操作过程和自定义一个普通的成员函数没啥区别除了上面这种最基础的,还有第二种更便捷的方法先通过拖拽方式创建一个按钮,右键这个按钮,点击“转到槽”:可以看到,我们通过这种方式生成的槽函数,并没有通过connect关联,因为在 Qt 中,除了通过connect 之外,还可以通过函数名字的方式来自动连接比如上面的槽函数名字。

aaqq800520的博客 1469

光学设计必看:如何用泽尼克系数优化镜头像差?从Zemax到实际案例解析

本文深入解析了如何利用泽尼克系数优化镜头像差,从理解其工程价值、解码软件报告,到在Zemax中主动设置优化目标。通过高倍显微物镜等实际案例,详细展示了如何通过分析泽尼克系数诊断问题,并实施针对性优化策略,从而实现对球差、彗差等像差的精准控制,提升光学设计的精细度和系统稳健性。

gg901的博客 1029

【中兴交换机MC-LAG配置】

​ 中兴mc-lag配置 主设备配置如下: Keepalive链路 interface smartgroup1023 //用作MC-LAG的Keepalive链路接口 switch attribute disable yes description For_Keepalived exit interface xgei-0/1/1/47 switch attribute disable yes description For_Keepalived exit interface

qq_31440733的博客 1万+

工控软件开发框架,GTK和QT好难选,快来拯救开发者。

工控软件开发框架如何选,有人喜欢GTK,有人钟意QT,而且每个人都有自己的一番道理,好像说的还都有理,这种情况该怎么办呢?带着你深入了解下。

2401_82943878的博客 2193

用STC8单片机解码EV1527遥控信号:从波形分析到C代码实现(附完整库)

本文详细介绍了如何使用STC8单片机解码EV1527遥控信号,从波形分析到C代码实现的完整过程。内容包括EV1527协议解析、硬件搭建、信号捕获技巧、解码算法实现及优化策略,并附有完整库代码,帮助开发者快速实现智能家居设备的无线控制。

weixin_34093995的博客 295

QT-窗口类部件

QWidget定义:Qt 所有可视化界面控件的基类(Widget = 窗口部件/控件)。特点可以作为独立窗口(如果没有父对象)。可以作为子控件嵌套在别的控件里(比如按钮、文本框)。提供了基本的绘制、事件处理(鼠标、键盘)、布局功能。中文理解:小部件 / 控件。例子:按钮 ()、标签 (QLabel)、输入框 (QLineEdit) 都继承自QWidget。

qq_59805046的博客 1083

学 Simulink——基于递推最小二乘法(RLS)的工业电机转动惯量 J在线辨识仿真

Te 估算 = 1.5·p·(ψ·iq + (Ld-Lq)·id·iq)回归量:φ(k)=−ω˙(k), y(k)=Te​(k), θ=J。仿真:电机加速 0→1500rpm,观测 J^(k)→Jnom​。(可选) Jtrue​切 0.04(双惯量负载)→ 看跟踪。电机机械运动方程:Te​−TL​=J⋅ω˙+B⋅ω。J^(0)=0.005→收敛至0.02kg⋅m2✔。Te​:电磁转矩(Nm),已知(来自电流环输出)仅需 Te​,ω(驱动器已有)→ 无额外传感 ✔。

amy_mhd的博客 45

视觉Transformer实战 | 将卷积引入视觉Transformer(CvT)

CvT 是一种融合卷积神经网络与 Vision Transformer 优势的视觉模型,旨在解决 ViT 缺乏平移不变性和局部性等归纳偏置的问题。CvT 采用分层结构逐级降采样,使用卷积词元嵌入代替传统 patch 切分,引入卷积投影替代线性投影。这些设计使得 CvT 能够去除位置编码,在高分辨率输入下表现更优。本节深入解析 CvT 的核心原理,并提供完整的 PyTorch 代码实现,演示如何在实际数据集上训练和评估 CvT 模型。

盼小辉丶的博客 726

图形相似在模式识别中的应用及python实现

Reference 算法流程图 注意:基本原理方法在文章中有详细介绍 使用该文章的方法,实现一个图形相似度的计算,完成模式识别 import numpy as np class Cycle(object): def __init__(self, N, E, S): self.N = N # 元素数量 # [['类型', '连接方式...

再走一步 1342

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

QT跨平台应用程序开发框架(11)—— Qt系统相关

C语言中,我们通过 fopen 打开文件,通过 fread 和 fwrite 读写文件,fclose 关闭文件C++中,我们通过 fstream 打开文件,<< 和 >> 读写文件,close 关闭文件Linux中,我们也通过原生 API 的 open 打开文件,read 和 write 读写文件,close 关闭文件。

aaqq800520的博客 1193

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

上一篇: 子菜单前带有复选框的创建方法
下一篇: Windows下ogre编译安装
荆楚闲人
博客等级 码龄20年 3万+粉丝 473原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值