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

news2024/12/25 8:54:04

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.coloradmin.cn/o/1282819.html

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

相关文章

LD_PRELOAD劫持、ngixn临时文件、无需临时文件rce

LD_PRELOAD劫持 <1> LD_PRELOAD简介 LD_PRELOAD 是linux下的一个环境变量。用于动态链接库的加载&#xff0c;在动态链接库的过程中他的优先级是最高的。类似于 .user.ini 中的 auto_prepend_file&#xff0c;那么我们就可以在自己定义的动态链接库中装入恶意函数。 也…

如何更改Jupyter Notebook中的环境?

1.首先&#xff0c;打开终端 2.接着&#xff0c;分别输入以下命令 conda env list 把EXPose替换为自己的环境变量 conda activate EXPose 3.接下来安装‘ ipykernel ’软件包 conda install ipykernel 4. 将该环境添加到Jupyter Notebook中&#xff1b;在Jupyter Notebook…

TiDB专题---2、TiDB整体架构和应用场景

上个章节我们讲解了TiDB的发展和特性&#xff0c;这节我们讲下TiDB具体的架构和应用场景。首先我们回顾下TiDB的优势。 TiDB的优势 与传统的单机数据库相比&#xff0c;TiDB 具有以下优势&#xff1a; 纯分布式架构&#xff0c;拥有良好的扩展性&#xff0c;支持弹性的扩缩容…

Docker Registry本地镜像仓库部署并实现远程连接拉取镜像

Linux 本地 Docker Registry本地镜像仓库远程连接 文章目录 Linux 本地 Docker Registry本地镜像仓库远程连接1. 部署Docker Registry2. 本地测试推送镜像3. Linux 安装cpolar4. 配置Docker Registry公网访问地址5. 公网远程推送Docker Registry6. 固定Docker Registry公网地址…

Combined Private Circuits - Combined Security Refurbished

目录 摘要引言针对组合攻击的对策相关工作 Combined Private Circuits - Combined Security Refurbished. CCS 2023 摘要 物理攻击是众所周知的对加密实现的威胁。虽然针对被动侧通道分析&#xff08;SCA&#xff09;和主动故障注入分析&#xff08;FIA&#xff09;的对策是单…

无人机停机坪的主要功能有哪些

随着无人机行业领域的不断完善&#xff0c;无人机停机坪作为一项关键基础设施&#xff0c;正发挥着越来越重要的作用。无人机停机坪也叫无人机机巢、无人机机库、无人机机场。无人机停机坪不仅是无人机的“家”&#xff0c;更是其高效运行的关键环节。让我们一同探索无人机停机…

全球与中国协作机器人市场:增长趋势、竞争格局与前景展望

协作机器人&#xff08;cobot&#xff09;是一种设计用于与人类协作和互动工作的机器人。协作机器人配备了各种感测器和先进技术&#xff0c;以确保与人类的安全协作。协作机器人应用于多种产业&#xff0c;包括制造业、医疗保健、物流和农业。协作机器人可用于需要人工监督和介…

SpringCache入门案例

依赖 <!--SpringCache起步依赖--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId><version>2.7.3</version> </dependency> <!--Redis起步依赖--&g…

yolov5实现多图形识别和图像训练

1.使用了yolov7,检测更好,但是训练上有问题,运行不起来,转了一圈发现yolov5是应用更广泛使用简单 2.怎么使用 //下载代码 https://github.com/ultralytics/yolov5 //安装依赖 pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple some-package //按…

电子学会全国青少年软件编程等级考试 中小学生python一级历年真题解析【更新至2023年9月 持续更新】

中国电子学会python等级考试一级历年真题解析 一、考级知识点分析 一、 了解Python多种开发环境&#xff0c;熟练使用Python自带的IDLE开 发环境&#xff0c;能够进行程序编写、调试和分析&#xff0c;具备使用Python开发 环境进行程序设计的能力 了解Python常见的几种编程环…

CO11N报工时,在填入返工数量后自动产生返工工单

本文档主要说明一种返工流程,当工人报工时,填写返工数量、变式原因即可启动触发点自动创建返工订单,被创建的反工订单为无料号生产订单,且关联报工订单。涉及系统功能点包括状态参数 一、 后台配置 1).用户状态参数:BS02(SPRO-生产-商店低价控制-主数据-订单-定义状态…

SAP 生产订单状态控制

对于生产订单状态&#xff0c;我们经常会对状态进行控制&#xff0c;比如说已领料报工的生产订单就不允许做重读主数据 或者是部分入库不允许做TECO等等 可以通过一个标准的事物代码进行对生产订单状态的一个控制 Tcode&#xff1a;BS22 选择你需要你控制的订单的状态编号双击…

VUE项目启动报错: ERROR Error: error:0308010C:digital envelope routines::unsupported

1.vue项目启动报错&#xff1a; 是因为新版本node造成的 方法&#xff1a;修改 packge.json文件 修改为下图&#xff1a; 添加了如下代码 SET NODE_OPTIONS--openssl-legacy-provider && 就可以正常启动了

n皇后问题的最优解及优化

n皇后问题的最优解 时间复杂度 package algorithm;public class NQueen {public static int num(int n){if(n < 1){return 0;}int[] record new int[n];//n皇后的n*n的棋盘&#xff0c;record[i]表示第i行的皇后放在了第几列return process(0,record,n);}/***返回n皇…

PLC通过485Modbus转Profinet网关与温控表通讯在发酵罐的应用

前提&#xff1a;在自动化控制系统中&#xff0c;PLC通常需要和各种设备进行数据通讯&#xff0c;其中就包括温控表。而这些设备之间的通讯常常需要通过485Modbus转Profinet网关&#xff08;XD-MDPN100&#xff09;来实现。 方案&#xff1a;在一些应用场合中&#xff0c;Profi…

一种结构新颖的双通带超导滤波器设计

闫鑫1,2&#xff0c;季来运1&#xff0c;张浩1,2&#xff0c;李颢毅1,2&#xff0c;王昭月1,2&#xff0c;曹凤莹1,2 &#xff08;1.天津海芯电子有限公司&#xff0c;天津300380&#xff1b;2.天津师范大学物理与材料科学学院&#xff0c;天津 300387.&#xff09; 摘要&…

CUDA简介——同步

1. 引言 前序博客&#xff1a; CUDA简介——基本概念CUDA简介——编程模式CUDA简介——For循环并行化CUDA简介——Grid和Block内Thread索引CUDA简介——CUDA内存模式 本文重点关注Thread同步和Barriers。 Threads并行执行&#xff0c;可能存在如下问题&#xff1a; 1&#…

Mybatis 操作续集(结合上文)

当我们增加一个数据之后,如果我们想要获取它的 Id 进行别的操作,我们该如何获取 Id 呢? 用那个Options package com.example.mybatisdemo.mapper;import com.example.mybatisdemo.model.UserInfo; import org.apache.ibatis.annotations.*;import java.util.List;Mapper pub…

读SAM代码

def add_decomposed_rel_pos(attn: torch.Tensor,q: torch.Tensor,rel_pos_h: torch.Tensor, 27,80的全零训练参数rel_pos_w: torch.Tensor,q_size: Tuple[int, int], (14,14)k_size: Tuple[int, int], ) -> torch.Tensor:计算相对位置嵌入"""Calculate deco…

中危漏洞!小程序优惠卷遍历

进入小程序&#xff0c;因为是一个小商城&#xff0c;所以照例先查看收货地址是否存在越权&#xff0c;以及能否未授权访问&#xff0c;但是发现不存在这些问题&#xff0c;所以去查看优惠卷 进入领券中心&#xff0c;点击领取优惠券时抓包 发现数据包&#xff0c;存在敏感参数…