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,一经查实,立即删除!

相关文章

洛谷 P1656 炸铁路 - SPFA

文章目录 炸铁路题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 题意解析思路CODE 炸铁路 题目描述 A 国派出将军 uim&#xff0c;对 B 国进行战略性措施&#xff0c;以解救涂炭的生灵。 B 国有 n n n 个城市&#xff0c;这些城市以铁路相连。任意两个城市都可以通…

矢量图形设计软件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…

C语言第四十二弹---使用多种方法实现字符串左旋转

使用多种方法实现字符串左旋转 一、 左移法 思路&#xff1a;每一次通过移动第一个字符&#xff0c;然后把后面的字符前移&#xff0c;然后再进行移动第一个字符再前移。故需要使用嵌套循环&#xff0c;外层循环控制移动第一个字符的次数&#xff0c;第二个循环进行字符前移 …

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

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

汽车电子芯片介绍之Aurix TC系列

Infineon的AURIX TC系列芯片是专为汽车电子系统设计的&#xff0c;采用了32位TriCore处理器架构。该系列芯片具有高性能、低功耗和丰富的外设接口&#xff0c;适用于广泛的汽车电子应用。以下是AURIX TC系列芯片的主要特性&#xff1a; 1. 高性能处理器 AURIX TC芯片采用了高…

【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; 删除一整行信息&…

Google Guava 集合工具使用详解

文章目录 集合集合分类- MultisetHashMultisetTreeMultisetLinkedHashMultisetConcurrentHashMultisetEnumMultisetImmutableMultiset - MultimapArrayListMultimapHashMultimapLinkedListMultimapLinkedHashMultimapTreeMultimapImmutableListMultimapImmutableSetMultimap - …

CnosDB有主复制演进历程

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

Android Audio实战——音频属性设置(二十二)

在 Android 中,使用音频属性(AudioAttributes)可以控制音频的行为。AudioAttributes 已经定义了一些常见的属性,比如音频用途、音频内容类型、音频标志等。 一、音频属性简介 1、常见属性 音量(volume):使用 setParameters("volume=5") 将音量设置为 5(范围…

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;保证连接的有效性的一种机制。在服务器和客户端之间一…

再谈项目管理中的效率问题

一、把事情做对。 敏捷的核心理念追求的就是把事情做对&#xff0c;这样的效率是最高的。中国古代就有南辕北辙的故事&#xff0c;方向错了再怎么努力都是白搭。那什么才是对的事情&#xff1f;这里分成了两派&#xff1a;1、瀑布方式认为一开始提的合同、需求就是对的事情&am…

嵌入式常用滤波算法

在嵌入式系统中&#xff0c;信号处理是一个关键的方面&#xff0c;特别是在处理来自各种传感器的数据时。滤波算法在这方面发挥着重要作用&#xff0c;用于去除噪声、平滑数据或提取有用的信号。以下是一些在嵌入式系统中常用的滤波算法&#xff1a; 1 低通滤波器&#xff08;…