qt-C++笔记之addItem(), addWidget(), addLayout()

qt-C++笔记之addItem(), addWidget(), addLayout()

code review!

文章目录

  • qt-C++笔记之addItem(), addWidget(), addLayout()
    • 0.《官方文档》相关示例截图
    • 1.ChatGPT解释
    • 2.《Qt 5.12实战》相关示例截图
      • 《Qt 5.12实战》:5.6 组合框
    • 3.addWidget()
    • 4.addWidget()和addChildWidget()对比
    • 5.addItem()
    • 6.addItem()和addItems()对比
    • 7.addLayout()
    • 8.addLayout()和addChildLayout()对比

0.《官方文档》相关示例截图

  • addWidget()和addStretch()结合使用示例
    在这里插入图片描述

  • addWidget()和addLayout()结合使用示例
    在这里插入图片描述

  • addWidget()和addLayout()结合使用示例
    在这里插入图片描述

1.ChatGPT解释

在Qt中,addItem(), addWidget(), 和 addLayout() 是用于布局管理的函数,它们用于将控件或布局添加到容器中,以实现界面的布局。

  1. addItem()QLayout 类的成员函数,用于将 QLayoutItem 添加到布局中。QLayoutItem 可以是一个小部件(QWidget)或一个布局(QLayout)。例如,对于 QHBoxLayoutQVBoxLayout,您可以使用 addItem() 将小部件或布局添加到水平或垂直布局中。

  2. addWidget()QBoxLayout 类的成员函数,用于将小部件(QWidget)添加到布局中。addWidget() 函数会自动创建一个 QLayoutItem 对象,并将其添加到布局中。例如,对于 QHBoxLayoutQVBoxLayout,您可以使用 addWidget() 将小部件添加到水平或垂直布局中。

  3. addLayout()QBoxLayout 类的成员函数,用于将布局(QLayout)添加到布局中。addLayout() 函数会自动创建一个 QLayoutItem 对象,并将其添加到布局中。例如,对于 QHBoxLayoutQVBoxLayout,您可以使用 addLayout() 将一个布局添加到另一个水平或垂直布局中。

这些函数是用于创建和管理布局的常用方法,用于在Qt应用程序中实现灵活和自适应的界面布局。通过使用这些函数,您可以根据需要将小部件和布局组织到不同的容器中,并指定它们的位置和排列方式。
以下图表(可能不全),展示了 addItem(), addWidget(), addLayout() 函数可以操作的对象,包括了常见的小部件 QComboBoxQCheckBox,以及标准布局 QHBoxLayoutQVBoxLayout

+------------------------+------------------------+------------------------+
|       addItem()        |       addWidget()       |       addLayout()       |
+------------------------+------------------------+------------------------+
|      QSpacerItem       |        QWidget         |        QLayout          |
+------------------------+------------------------+------------------------+
|      QLayoutItem       |     QComboBox          |      QLayout (Customized)    |
+------------------------+------------------------+------------------------+
|                        |    QCheckBox           |         QSpacerItem          |
+------------------------+------------------------+------------------------+
|                        |                        |         QWidget               |
+------------------------+------------------------+------------------------+
|                        |                        |         QLayout (Standard)    |
+------------------------+------------------------+------------------------+
|                        |                        |      QHBoxLayout               |
+------------------------+------------------------+------------------------+
|                        |                        |      QVBoxLayout               |
+------------------------+------------------------+------------------------+

2.《Qt 5.12实战》相关示例截图

《Qt 5.12实战》:5.6 组合框

在这里插入图片描述

3.addWidget()

在Qt中,addWidget()函数用于向布局添加小部件(widget)。它的参数可以根据具体情况而变化,取决于所使用的布局类型。

一般情况下,addWidget()函数的常见参数如下:

  1. 小部件(widget):要添加到布局中的小部件。可以是任何继承自QWidget的类,如QLabel、QPushButton、QLineEdit等。

  2. 行号(row):可选参数,指定小部件在布局中所在的行号。一些布局(如QGridLayout)需要指定行号才能正确放置小部件。

  3. 列号(column):可选参数,指定小部件在布局中所在的列号。与行号类似,某些布局需要指定列号才能正确放置小部件。

  4. 伸展因子(stretch):可选参数,指定小部件在布局中的伸展因子。伸展因子用于确定小部件在布局中的大小调整比例。默认情况下,伸展因子为0,表示小部件不会拉伸。如果设置为正整数,表示小部件可以根据布局的大小进行拉伸。

  5. 对齐方式(alignment):可选参数,指定小部件在布局中的对齐方式。可以是Qt中的对齐标志,如Qt::AlignLeft、Qt::AlignRight、Qt::AlignCenter等。

这些参数的具体使用方式取决于所使用的布局类型。不同的布局可能会有额外的参数或不同的参数顺序。因此,在使用addWidget()函数时,建议查阅相关布局的文档以了解正确的参数使用方式。

以下是一个使用addWidget()函数的示例:

QVBoxLayout *layout = new QVBoxLayout; // 创建垂直布局
QWidget *widget = new QWidget; // 创建父部件
widget->setLayout(layout); // 设置父部件的布局QPushButton *button1 = new QPushButton("Button 1");
layout->addWidget(button1); // 将按钮添加到布局中QLabel *label = new QLabel("Label");
layout->addWidget(label, 0, Qt::AlignCenter); // 将标签添加到布局中,并居中对齐QPushButton *button2 = new QPushButton("Button 2");
layout->addWidget(button2, 1, 0, 1, Qt::AlignRight); // 将按钮添加到布局中,位于第二行第一列,并右对齐

在上面的示例中,我们使用QVBoxLayout创建一个垂直布局,并将其设置为一个QWidget的布局。然后,使用addWidget()函数将QPushButton和QLabel添加到布局中,并指定了不同的参数,如行号、列号和对齐方式。

4.addWidget()和addChildWidget()对比

在Qt中,addWidget()addChildWidget()都是用于将控件添加到布局中的函数,但它们有一些不同之处。

  1. addWidget()函数:

    • 函数签名:void QLayout::addWidget(QWidget *widget, int stretch = 0, Qt::Alignment alignment = Qt::Alignment())
    • 作用:将一个控件添加到布局中。
    • 参数:
      • widget:要添加的控件对象。
      • stretch:可选参数,表示控件在布局中的拉伸因子,默认值为0。拉伸因子用于控制控件在布局中的分配空间比例。如果设置为0,表示控件不会拉伸;如果设置为正整数,表示控件会根据拉伸因子的比例拉伸。
      • alignment:可选参数,表示控件在布局中的对齐方式,默认为Qt::Alignment(),即不指定对齐方式。可以通过Qt::AlignmentFlag枚举值来指定对齐方式,比如Qt::AlignLeftQt::AlignRight等。
    • 示例:
      QVBoxLayout *layout = new QVBoxLayout;
      QPushButton *button = new QPushButton("Button");
      layout->addWidget(button);
      
  2. addChildWidget()函数:

    • 函数签名:void QLayout::addChildWidget(QWidget *widget)
    • 作用:将一个控件作为子控件添加到布局中。
    • 参数:
      • widget:要添加的控件对象。
    • 示例:
      QVBoxLayout *layout = new QVBoxLayout;
      QPushButton *button = new QPushButton("Button");
      layout->addChildWidget(button);
      

主要的区别在于:

  • addWidget()可以设置拉伸因子和对齐方式,而addChildWidget()没有提供这些参数。addWidget()允许你控制控件在布局中的空间分配和对齐,而addChildWidget()将控件作为子控件添加到布局中,但不提供进一步的布局控制。
  • addWidget()可以在布局中添加控件时指定拉伸因子和对齐方式,而addChildWidget()不提供这样的功能,它只是简单地将控件作为子控件添加到布局中。
  • addWidget()可以用于添加控件以外的元素,比如布局对象,而addChildWidget()只能用于添加控件。

总结来说,addWidget()提供了更多的灵活性和控制选项,适用于需要更精细布局的场景。而addChildWidget()则更简单且适用于将控件作为子控件添加到布局中的情况。

5.addItem()

在Qt中,addItem()函数用于向一些特定的控件(如QComboBox、QListWidget、QTreeWidget等)添加项(items)。它的具体参数和用法会根据控件的类型而有所不同。下面我将对常见的使用情况进行详细解释。

  1. QComboBox控件:

    • addItem(const QString &text, const QVariant &userData = QVariant()):向QComboBox添加一个文本项。text参数表示显示的文本,userData参数表示与该项关联的自定义数据(可选)。
  2. QListWidget控件:

    • addItem(const QString &label):向QListWidget添加一个标签项。label参数表示项的显示文本。
    • addItem(QListWidgetItem *item):向QListWidget添加一个QListWidgetItem对象。
  3. QTreeWidget控件:

    • addTopLevelItem(QTreeWidgetItem *item):向QTreeWidget添加一个顶级项(根节点)。item参数为一个QTreeWidgetItem对象。
    • addTopLevelItems(const QList<QTreeWidgetItem*> &items):向QTreeWidget一次性添加多个顶级项。
  4. QTreeWidgetItem控件:

    • addChild(QTreeWidgetItem *child):向当前项(父项)添加一个子项。child参数为一个QTreeWidgetItem对象。
    • addChildren(const QList<QTreeWidgetItem*> &children):向当前项(父项)一次性添加多个子项。
    • setText(int column, const QString &text):为当前项的指定列设置文本内容。

这些只是一些常见的使用情况,实际上,不同的控件可能还有其他的addItem()函数重载版本,以支持更多的参数和用法。

以下是一个使用addItem()函数的示例:

QComboBox *comboBox = new QComboBox;
comboBox->addItem("Item 1");
comboBox->addItem("Item 2", "Custom Data"); // 添加带有自定义数据的项QListWidget *listWidget = new QListWidget;
QListWidgetItem *item = new QListWidgetItem("Item 1");
listWidget->addItem(item);QTreeWidget *treeWidget = new QTreeWidget;
QTreeWidgetItem *topLevelItem = new QTreeWidgetItem(treeWidget);
topLevelItem->setText(0, "Top Level Item");QTreeWidgetItem *childItem = new QTreeWidgetItem(topLevelItem);
childItem->setText(0, "Child Item");

在上面的示例中,我们分别使用addItem()函数向QComboBox、QListWidget和QTreeWidget添加了不同类型的项。对于QComboBox,我们可以指定一个可选的自定义数据;对于QListWidget和QTreeWidget,我们可以使用QListWidgetItemQTreeWidgetItem对象来创建和设置项的属性。

6.addItem()和addItems()对比

在Qt中,addItem()addItems()是用于向列表控件(如QComboBoxQListWidget等)添加项的函数,但它们有一些不同之处。

  1. addItem()函数:

    • 函数签名:
      • void QComboBox::addItem(const QString& text, const QVariant& userData = QVariant())
      • int QListWidget::addItem(const QListWidgetItem *item)
    • 作用:向列表控件中添加一个项。
    • 参数:
      • 对于QComboBox
        • text:要添加的项的文本。
        • userData:可选参数,与项关联的用户数据。可以是任意类型的值。
      • 对于QListWidget
        • item:要添加的QListWidgetItem对象。
    • 示例:
      QComboBox *comboBox = new QComboBox;
      comboBox->addItem("Item 1");QListWidget *listWidget = new QListWidget;
      QListWidgetItem *item = new QListWidgetItem("Item 1");
      listWidget->addItem(item);
      
  2. addItems()函数:

    • 函数签名:
      • void QComboBox::addItems(const QStringList& texts)
      • void QListWidget::addItems(const QStringList& labels)
    • 作用:向列表控件中添加多个项。
    • 参数:
      • 对于QComboBox
        • texts:要添加的项的文本列表,使用QStringList类型。
      • 对于QListWidget
        • labels:要添加的项的标签列表,使用QStringList类型。
    • 示例:
      QComboBox *comboBox = new QComboBox;
      QStringList items = {"Item 1", "Item 2", "Item 3"};
      comboBox->addItems(items);QListWidget *listWidget = new QListWidget;
      QStringList labels = {"Item 1", "Item 2", "Item 3"};
      listWidget->addItems(labels);
      

主要的区别在于:

  • addItem()用于向列表控件中添加单个项,而addItems()用于向列表控件中添加多个项。
  • addItem()函数为每个项提供了更多的灵活性,可以单独指定项的文本和用户数据(对于QComboBox),或者直接传递QListWidgetItem对象(对于QListWidget)。
  • addItems()函数更方便,它接受一个字符串列表作为参数,将列表中的每个字符串作为一个项添加到列表控件中。

总结来说,如果只需添加单个项,可以使用addItem()函数;如果要添加多个项,可以使用addItems()函数,它提供了一种更简便的方式来添加多个项。

7.addLayout()

在Qt中,addLayout()是一个用于添加布局的函数,它的作用是将一个布局添加到另一个布局中。它的参数是一个布局对象,可以是QLayout的子类,比如QHBoxLayoutQVBoxLayout等。

addLayout()函数的声明如下:

void QLayout::addLayout(QLayout *layout, int stretch = 0);

参数解释如下:

  • layout:要添加的布局对象。
  • stretch:可选参数,表示布局在父布局中的拉伸因子,默认值为0。拉伸因子用于控制布局在父布局中的分配空间比例。如果设置为0,表示布局不会拉伸;如果设置为正整数,表示布局会根据拉伸因子的比例拉伸。

例如,假设有一个QVBoxLayout对象mainLayout作为主布局,还有一个QHBoxLayout对象subLayout作为子布局,可以使用addLayout()subLayout添加到mainLayout中:

QVBoxLayout *mainLayout = new QVBoxLayout;
QHBoxLayout *subLayout = new QHBoxLayout;// 添加子布局到主布局中
mainLayout->addLayout(subLayout);

这样,subLayout就成为了mainLayout的一个子布局,它们之间的控件将按照布局的设置进行排列。

还可以通过指定拉伸因子来调整布局在父布局中的空间分配比例。例如,可以将subLayout设置为具有拉伸因子2,这样它在父布局中将获得比其他布局更多的空间:

mainLayout->addLayout(subLayout, 2);

这样,subLayout将会比其他布局在父布局中占据更多的空间。

需要注意的是,addLayout()函数只是将布局对象添加到父布局中,并不会立即进行布局计算和显示。要使布局生效,需要调用父布局的addWidget()addLayout()函数,或者将父布局设置为窗口的主布局(通过QWidgetsetLayout()函数)。这样,在窗口显示时,布局将会根据设置进行计算和显示。

8.addLayout()和addChildLayout()对比

在Qt中,addLayout()addChildLayout()都是用于将布局添加到布局中的函数,但它们也有一些不同之处。

  1. addLayout()函数:

    • 函数签名:void QLayout::addLayout(QLayout *layout, int stretch = 0)
    • 作用:将一个布局添加到另一个布局中。
    • 参数:
      • layout:要添加的布局对象。
      • stretch:可选参数,表示布局在父布局中的拉伸因子,默认值为0。拉伸因子用于控制布局在父布局中的分配空间比例。如果设置为0,表示布局不会拉伸;如果设置为正整数,表示布局会根据拉伸因子的比例拉伸。
    • 示例:
      QVBoxLayout *mainLayout = new QVBoxLayout;
      QHBoxLayout *subLayout = new QHBoxLayout;
      mainLayout->addLayout(subLayout);
      
  2. addChildLayout()函数:

    • 函数签名:void QLayout::addChildLayout(QLayout *layout)
    • 作用:将一个布局作为子布局添加到布局中。
    • 参数:
      • layout:要添加的布局对象。
    • 示例:
      QVBoxLayout *mainLayout = new QVBoxLayout;
      QHBoxLayout *subLayout = new QHBoxLayout;
      mainLayout->addChildLayout(subLayout);
      

主要的区别在于:

  • addLayout()可以设置拉伸因子,而addChildLayout()没有提供这个参数。addLayout()允许你控制布局在父布局中的空间分配,而addChildLayout()将布局作为子布局添加到布局中,但不提供进一步的布局控制。
  • addLayout()可以在布局中添加布局时指定拉伸因子,而addChildLayout()不提供这样的功能,它只是简单地将布局作为子布局添加到布局中。
  • addLayout()可以用于添加布局以外的元素,比如控件对象,而addChildLayout()只能用于添加布局。

总结来说,addLayout()提供了更多的灵活性和控制选项,适用于需要更精细布局的场景。而addChildLayout()则更简单且适用于将布局作为子布局添加到布局中的情况。

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

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

相关文章

矢量图形设计软件CorelDRAW 2023 mac界面说明

CorelDRAW 2023 mac是一款专业的矢量图形设计软件&#xff0c;由Corel公司开发。它提供了广泛的创意工具和功能&#xff0c;旨在满足设计师、艺术家和创意专业人士的需求。 CorelDRAW 2023具有直观的用户界面和工作流程&#xff0c;使用户能够轻松创建各种类型的图形设计&#…

XSS漏洞原理

XSS漏洞介绍&#xff1a; 跨站脚本攻击XSS(Cross Site Scripting)&#xff0c;为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆&#xff0c;故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码&#xff0c;当用户浏览该页面时&#xff0c;嵌入We…

基于Java SSM框架+Vue实现企业公寓后勤管理系统项目【项目源码+论文说明】

基于java的SSM框架Vue实现企业宿舍后勤管理网站演示 摘要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所…

【Linux】进程控制-进程终止

目录 一、进程终止&#xff0c;OS做了什么&#xff1f; 二、进程终止的常见方式 1、代码跑完&#xff0c;结果正确 2、代码跑完&#xff0c;结果不正确 补充 (1)、main函数的返回值的意义是什么&#xff1f; (2)、return 0的含义是什么&#xff1f; (3)、退出码是什么和…

基于OpenCV和改进深度学习网络的香菇分级图像分割系统

1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 研究背景与意义 近年来&#xff0c;随着计算机视觉和深度学习的快速发展&#xff0c;图像分割技术在各个领域中得到了广泛应用。图像分割是将图像划分为不同的区域或对象的过程&…

Visual Studio 2022+Python3.11实现C++调用python接口

大家好&#xff01;我是编码小哥&#xff0c;欢迎关注&#xff0c;持续分享更多实用的编程经验和开发技巧&#xff0c;共同进步。 查了一些资料&#xff0c;不是报这个错&#xff0c;就是报哪个错&#xff0c;没有找到和我安装的环境的一致的案例&#xff0c;于是将自己的摸索分…

SQL错题集1

1.找出选修课程成绩最差的选课记录 注&#xff1a; 聚合函数只能用在group by和&#xff08;&#xff09;括号中 找最值可用排序order bylimit 1 2. 查询选修成绩 合格的课程 超过2门的 学生编号 3.删除姓名为"LiMing"的学生信息 注&#xff1a; 删除一整行信息&…

CnosDB有主复制演进历程

分布式存储系统的复杂性涉及数据容灾备份、一致性、高并发请求和大容量存储等问题。本文结合CnosDB在分布式环境下的演化历程&#xff0c;分享如何将分布式理论应用于实际生产&#xff0c;以及不同实现方式的优缺点和应用场景。 分布式系统架构模式 分布式存储系统下按照数据复…

java消息中间件简介

一、为什么要使用消息中间件 消息中间件就是可以省去繁琐的步骤&#xff0c;直达目的&#xff0c;怎么讲呢&#xff0c;就是比如你想很多人&#xff0c;知道你的动态&#xff0c;而知道的人可能手机没电&#xff0c;可能手机信号不好&#xff0c;可能手机不在服务区&#xff0c…

智能优化算法应用:基于狮群算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于狮群算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于狮群算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.狮群算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

Maven的安装与配置本地仓库,镜像源,环境变量详细步骤

参考视频&#xff1a; 黑马程序员2023新版JavaWeb开发教程&#xff0c;实现javaweb企业开发全流程 【小飞非系列】最新Maven实战教程-项目实战构建利器 文章目录 一.下载Maven安装包二.配置Maven的本地仓库(本机仓库)三.配置镜像源&#xff08;加速jar包的下载)四.配置Maven的环…

Zookeeper 安装与部署

Zookeeper官网 目录 1 配置文件参数解读2 Zookeeper 单点安装3 Zookeeper 分布式安装 1 配置文件参数解读 Zookeeper 中的配置文件 zoo.cfg 中参数含义解读如下&#xff1a; &#xff08;1&#xff09;tickTime 2000&#xff1a;通信心跳数&#xff0c;Zookeeper 服务器与客户…

IdleStateHandler 心跳机制源码详解

优质博文&#xff1a;IT-BLOG-CN 一、心跳机制 Netty支持心跳机制&#xff0c;可以检测远程服务端是否存活或者活跃。心跳是在TCP长连接中&#xff0c;客户端和服务端定时向对方发送数据包通知对方自己还在线&#xff0c;保证连接的有效性的一种机制。在服务器和客户端之间一…

bean依赖属性配置

bean依赖属性配置 文章目录 bean依赖属性配置 Data ConfigurationProperties(prefix "cartoon") public class CartoonProperties {private Cat cat;private Mouse mouse; }cartoon:cat:name: whatage: 5mouse:name: howage: 6这样的话&#xff0c;业务bean无需在读…

FPC和PCB有哪些区别?

现在电子技术越来越先进&#xff0c;CPU可以做到5nm工艺&#xff0c;电路板可以做到几十层&#xff0c;可折叠屏应用多款手机中。 什么是FPC&#xff1f; FPC&#xff1a;Flexible Printed Circuit&#xff0c;柔性电路板&#xff0c;又被称为“软板” FPC 以聚酰亚胺或聚酯薄…

Active Stereo Without Pattern Projector论文精读

1.背景补充 主动立体相机和被动立体相机的主要区别在于它们获取立体视觉信息的方式 主动立体相机12&#xff1a; 主动立体视觉是指寻找最佳的视角去重建目标或者场景1。主动视觉的实现方式通常有&#xff1a;改变环境中的光照条件、改变相机的视角、移动相机自身位置等&…

利用 LD_PRELOAD劫持动态链接库,绕过 disable_function

目录 LD_PRELOAD 简介 程序的链接 动态链接库的搜索路径搜索的先后顺序&#xff1a; 利用LD_PRELOAD 简单的劫持 执行id命令 反弹shell 引申至 PHP 绕过disable_function 方法1&#xff1a;使用蚁剑的扩展工具绕过disable_function 方法2&#xff1a;利用 mail 函数…

电磁兼容EMC理论基础汇总

目录 0. 序言 1. EMC的基础介绍 1.1 EMC电磁兼容的定义 1.2 EMC的重要性 1.3 EMC的三要素 2. 库仑定律 3. 趋肤效应与趋肤深度 4. 电阻抗公式 4.1 电阻 4.2 容抗 4.3 感抗 4.4 电路元件的非理想性 5. 麦克斯韦方程组 5.1 高斯磁定律 5.2 高斯定律 5.3 法拉…

Appwidget开发基本介绍

本篇主要对appwidget开发进行简单介绍&#xff0c;为后续漏洞挖掘相关做前置铺垫 appwidget简介 官方解释如下&#xff1a; 应用微件是可以嵌入其他应用&#xff08;如主屏幕&#xff09;并接收定期更新的微型应用视图。这些视图称为界面中的微件&#xff0c;您可以使用应用微…

软件工程精品课程教学网站的设计与实现

系统功能需求分析 本系统要求采用Browser/Server模式设计开发&#xff0c;可以作为一般高等院校的网络学堂&#xff1b;可以为教师的辅助教学或者网络教学提供一个完善的教学网站&#xff1b;学生可以利用本教学网站来完成一些课程的学习任务。 2.2.1 功能划分 《软件工程》教学…