qt-C++笔记之不使用ui文件纯C++构建时控件在布局管理器作用下的默认位置和大小实践

qt-C++笔记之不使用ui文件纯C++构建时控件在布局管理器作用下的默认位置和大小实践

code review!

文章目录

  • qt-C++笔记之不使用ui文件纯C++构建时控件在布局管理器作用下的默认位置和大小实践
    • 1.ChatGPT解释
    • 2.ChatGPT——resize()和move()详解
    • 3.默认大小和位置——示例运行一
    • 4.默认大小和位置——示例运行二
    • 5.默认大小和位置treeWidget的示例——示例运行三

1.ChatGPT解释

当在Qt中创建控件但没有指定其大小和位置时,Qt会使用默认的大小和位置来显示这些控件。这些默认值是根据每种控件类型的样式和默认设置来确定的。

默认大小:
每个控件类型都有一个默认的推荐大小,该大小通常与控件的内容、样式和默认字体相关。例如,一个QPushButton的默认大小可能足够容纳按钮上的文本,并留有一定的边距。

默认位置:
当控件没有显式指定位置时,默认情况下,Qt会按照它们在代码中创建的顺序来排列控件。也就是说,后创建的控件将位于先创建的控件的后面。

默认情况下,Qt中的控件是以窗口的左上角为参考点进行定位的。因此,如果没有指定位置,控件的默认位置将相对于窗口的左上角进行布局。

需要注意的是,默认的大小和位置可能会因不同的操作系统、Qt版本和样式设置而有所差异。此外,控件的默认大小和位置也可以通过样式表和其他属性进行自定义。

如果你想要更精确地控制控件的大小和位置,可以使用控件的方法,例如resize()move(),来显式地设置控件的大小和位置。这样可以确保控件按照你的要求进行布局。

2.ChatGPT——resize()和move()详解

在Qt中,resize()move()是用于显式设置控件大小和位置的方法。

  1. resize(width, height):该方法用于设置控件的大小,其中widthheight分别表示控件的宽度和高度。调用该方法后,控件将被调整为指定的大小。

示例:

QPushButton button;
button.resize(100, 50);  // 设置按钮的大小为宽度100、高度50
  1. move(x, y):该方法用于设置控件的位置,其中xy分别表示控件的横坐标和纵坐标。调用该方法后,控件将被移动到指定的位置。

示例:

QPushButton button;
button.move(200, 150);  // 将按钮移动到坐标(200, 150)的位置

这两个方法可以单独使用,也可以组合使用,以达到精确控制控件大小和位置的目的。

需要注意的是,resize()move()方法中指定的参数是相对于父窗口坐标系的。如果控件是直接添加到窗口中,则相对于窗口的左上角;如果控件是添加到其他控件中,则相对于父控件的左上角。

此外,还可以使用setGeometry(x, y, width, height)方法一次性设置控件的位置和大小。该方法接受四个参数,分别为控件的横坐标、纵坐标、宽度和高度。

示例:

QPushButton button;
button.setGeometry(200, 150, 100, 50);  // 设置按钮的位置和大小

使用这些方法可以实现更精确的控件布局,但在复杂的界面中,使用布局管理器仍然是更推荐的方式,因为它可以自动处理控件的位置和大小,简化布局过程,并适应不同的窗口大小和布局需求。

3.默认大小和位置——示例运行一

在这里插入图片描述

代码

#include <QtWidgets>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    // 创建主窗口
    QWidget window;
    window.setWindowTitle("控件位置示例");

    // 创建控件
    QLabel *label = new QLabel("这是一个标签", &window);
    QPushButton *button = new QPushButton("这是一个按钮", &window);

    // 创建垂直布局管理器
    QVBoxLayout *layout = new QVBoxLayout(&window);

    // 将控件添加到布局管理器中
    layout->addWidget(label);
    layout->addWidget(button);

    // 设置主窗口的布局管理器
    window.setLayout(layout);

    // 显示主窗口
    window.show();

    return app.exec();
}

4.默认大小和位置——示例运行二

在这里插入图片描述

#include <QtWidgets>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    // 创建主窗口
    QWidget window;
    window.setWindowTitle("控件位置示例");

    // 创建控件
    QLabel *label = new QLabel("这是一个标签", &window);
    QPushButton *button = new QPushButton("这是一个按钮", &window);
    QLineEdit *lineEdit = new QLineEdit(&window);
    QTextEdit *textEdit = new QTextEdit(&window);
    QCheckBox *checkBox = new QCheckBox("复选框", &window);
    QRadioButton *radioButton1 = new QRadioButton("单选按钮1", &window);
    QRadioButton *radioButton2 = new QRadioButton("单选按钮2", &window);

    // 创建布局管理器
    QVBoxLayout *mainLayout = new QVBoxLayout(&window);
    QHBoxLayout *buttonLayout = new QHBoxLayout;
    QVBoxLayout *radioLayout = new QVBoxLayout;

    // 设置按钮布局
    buttonLayout->addWidget(button);
    buttonLayout->addWidget(lineEdit);

    // 设置单选按钮布局
    radioLayout->addWidget(radioButton1);
    radioLayout->addWidget(radioButton2);

    // 将控件添加到主布局管理器中
    mainLayout->addWidget(label);
    mainLayout->addWidget(textEdit);
    mainLayout->addWidget(checkBox);
    mainLayout->addLayout(buttonLayout);
    mainLayout->addLayout(radioLayout);

    // 设置主窗口的布局管理器
    window.setLayout(mainLayout);

    // 显示主窗口
    window.show();

    return app.exec();
}

在这个示例中,我添加了以下控件:

  • QLineEdit:用于输入单行文本。
  • QTextEdit:用于输入多行文本。
  • QCheckBox:复选框。
  • QRadioButton:单选按钮。

还创建了两个额外的布局管理器:

  • QHBoxLayout:用于将按钮和QLineEdit水平排列。
  • QVBoxLayout:用于将两个单选按钮垂直排列。

最后,将这些控件和布局管理器添加到主布局管理器mainLayout中,并将其设置为主窗口的布局管理器。

当运行这个示例代码时,将看到一个包含了多个控件的窗口。这些控件将根据布局管理器的设置自动调整大小和位置,以适应窗口的大小。

5.默认大小和位置treeWidget的示例——示例运行三

在这里插入图片描述

代码

#include <QtWidgets>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    // 创建主窗口
    QWidget window;
    window.setWindowTitle("Tree Widget 示例");

    // 创建 Tree Widget
    QTreeWidget *treeWidget = new QTreeWidget(&window);
    treeWidget->setHeaderLabels({"名称", "数值"});

    // 创建根节点
    QTreeWidgetItem *rootItem = new QTreeWidgetItem(treeWidget);
    rootItem->setText(0, "根节点");

    // 创建子节点
    QTreeWidgetItem *childItem1 = new QTreeWidgetItem(rootItem);
    childItem1->setText(0, "子节点1");
    childItem1->setText(1, "数值1");
    childItem1->setIcon(0, QIcon::fromTheme("folder"));

    QTreeWidgetItem *childItem2 = new QTreeWidgetItem(rootItem);
    childItem2->setText(0, "子节点2");
    childItem2->setText(1, "数值2");
    childItem2->setIcon(0, QIcon::fromTheme("folder"));

    // 创建孙子节点
    QTreeWidgetItem *grandchildItem1 = new QTreeWidgetItem(childItem2);
    grandchildItem1->setText(0, "孙子节点1");
    grandchildItem1->setText(1, "数值3");
    grandchildItem1->setIcon(0, QIcon::fromTheme("document"));

    QTreeWidgetItem *grandchildItem2 = new QTreeWidgetItem(childItem2);
    grandchildItem2->setText(0, "孙子节点2");
    grandchildItem2->setText(1, "数值4");
    grandchildItem2->setIcon(0, QIcon::fromTheme("document"));

    // 将 Tree Widget 添加到主窗口布局中
    QVBoxLayout *layout = new QVBoxLayout(&window);
    layout->addWidget(treeWidget);
    window.setLayout(layout);

    // 显示主窗口
    window.show();

    return app.exec();
}

使用Qt内置的图标,使用QIcon::fromTheme()方法来获取Qt内置图标。fromTheme()方法接受一个图标名称作为参数,返回与该名称关联的内置图标。

在示例中,我们使用了"folder"图标名称来设置根节点和子节点的图标,使用"document"图标名称来设置孙子节点的图标。这些内置图标将根据当前操作系统的主题和图标设置进行自动选择。

运行示例后,将看到一个具有多层级树形结构和内置图标的QTreeWidget控件。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

31 - MySQL调优之SQL语句:如何写出高性能SQL语句?

从今天开始&#xff0c;我将带你一起学习 MySQL 的性能调优。MySQL 数据库是互联网公司使用最为频繁的数据库之一&#xff0c;不仅仅因为它开源免费&#xff0c;MySQL 卓越的性能、稳定的服务以及活跃的社区都成就了它的核心竞争力。 我们知道&#xff0c;应用服务与数据库的交…

3D建模对制造企业的价值

除非你在过去几年一直躲在岩石下,否则你可能听说过“3D 建模”和“3D 渲染”这些术语。 但为什么这项技术如此重要,尤其是对于产品制造公司而言? 简而言之,它减少了项目时间和成本。 这为制造商提供了更多的设计试验空间。 未能利用 3D 建模技术的公司很快就会落后于竞争对…

MYSQL基础之【正则表达式,事务处理】

文章目录 前言MySQL 正则表达式MySQL 事务事务控制语句事务处理方法PHP中使用事务实例 后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;Mysql &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不…

P18 C++ 继承

目录 前言 01 不使用继承会让你多打很多无用的代码 02 继承 最后的话 前言 本期我们学习 C 面向对象编程中的继承。 面向对象程序设计中最重要的一个概念是继承。继承允许我们依据另一个类来定义一个类&#xff0c;这使得创建和维护一个应用程序变得更容易。这样做&#…

BC77 简单计算器(牛客)

#include <stdio.h> int main() {double a, b, d;//用来接收浮点数char c;//用来接受符号scanf("%lf %c %lf", &a, &c, &b);if (c || c - || c * || c /)//判断输入的运算符号不包括在&#xff08;、-、*、/&#xff09;范围内{switch (c)//根…

从0开始学习JavaScript--构建强大的JavaScript图片库

在现代Web开发中&#xff0c;图像是不可或缺的一部分&#xff0c;而构建一个强大的JavaScript图片库能够有效地管理、展示和操作图像&#xff0c;为用户提供更丰富的视觉体验。本文将深入探讨构建JavaScript图片库的实用技巧&#xff0c;并通过丰富的示例代码演示如何实现各种功…

因子分析例题(多元统计分析期末复习)

例一 设某客观现象可用 X {X} X( X 1 {X_1} X1​&#xff0c; X 2 {X_2} X2​&#xff0c; X 3 {X_3} X3​)’ 来描述&#xff0c;在因子分析时&#xff0c;从约相关阵出发计算特征值为 λ 1 {λ_1} λ1​1.754&#xff0c; λ 2 {λ_2} λ2​1&#xff0c; λ 3 {λ_3} λ3​…

transformers pipeline出现ConnectionResetError的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

(C++)string类的模拟实现

愿所有美好如期而遇 前言 我们模拟实现string类不是为了去实现他&#xff0c;而是为了了解他内部成员函数的一些运行原理和时间复杂度&#xff0c;在将来我们使用时能够合理地去使用他们。 为了避免我们模拟实现的string类与全局上的string类冲突(string类也在std命名空间中)&…

机器学习【04重要】pycharm中关闭jupyter服务器

直接关掉pycharm 不行 点红方块关闭 不行 我们曲线进行 我们的方法成功截图 实现全程不在服务器上操作 首先点击下图 点击退出&#xff0c;即可 查看端口

Java 注解在 Android 中的使用场景

Java 元注解有 5 种&#xff0c;常用的是 Target 和 Retention 两个。 其中 Retention 表示保留级别&#xff0c;有三种&#xff1a; RetentionPolicy.SOURCE - 标记的注解仅保留在源码级别中&#xff0c;并被编译器忽略RetentionPolicy.CLASS - 标记的注解在编译时由编译器保…

【Springboot系列】SpringBoot整合WebSocket,既然如此简单(含源码)

文章目录 前言&#xff1a;什么是WebSocket&#xff1f;Spring Boot中的WebSocket支持WebSocket和HTTP优劣势WebSocket的优势&#xff1a;1.实时性&#xff1a;2.较低的延迟&#xff1a;3.较小的数据传输量&#xff1a;4.更好的兼容性&#xff1a; HTTP的优势&#xff1a;1.简单…

从0开始学习JavaScript--JavaScript中的对象原型

JavaScript中的对象原型是理解该语言核心概念的关键之一。本文将深入探讨JavaScript对象原型的作用、使用方法以及与继承相关的重要概念。通过详细的示例代码和全面的讲解&#xff0c;将能够更好地理解和运用JavaScript对象原型&#xff0c;提高代码的可维护性和扩展性。 Java…

RHCE---给openlab搭建web网站

作业&#xff1a;请给openlab搭建web网站 网站需求&#xff1a; 1.基于域名 www.openlab.com 可以访问网站内容为 welcome to openlab!!! 2.给该公司创建三个子界面分别显示学生信息&#xff0c;教学资料和缴费网站&#xff0c; 1、基于 www.openlab.com/student 网站访问学生信…

C#,《小白学程序》第十八课:随机数(Random)第五,方差及标准方差(标准差)的计算方法与代码

1 文本格式 /// <summary> /// 《小白学程序》第十八课&#xff1a;随机数&#xff08;Random&#xff09;第五&#xff0c;方差及标准方差&#xff08;标准差&#xff09;的计算方法与代码 /// 方差 SUM(&#xff08;Xi - X)^2 ) / n i0...n-1 X Average of X[i] ///…

如果客户端同时有ipv4和ipv6,浏览器是如何选择用哪种ip

在互联网协议&#xff08;IP&#xff09;的发展历程中&#xff0c;IPv4和IPv6是两种主要的版本。对于一个客户端来说&#xff0c;同时拥有IPv4和IPv6的能力是常见的情况。那么&#xff0c;当一个客户端同时具有IPv4和IPv6的能力时&#xff0c;浏览器是如何选择使用哪种IP进行通…

redis(Remote Dictionary Service) 底层数据结构

redis 底层数据结构 动态字符串SDS 优点 获取字符串长度的时间复杂度O(1) 支持动态扩容&#xff0c;减少内存分配次数 新字符串小于1M – 新空间为扩展后字符串长度的两倍 1 新字符串大于1M – 新空间为扩展后字符串长度 1M 1. 内存预分配 二进制安全&#xff08;记录了…

高并发系统:它的通用设计方法是什么?

Java全能学习面试指南&#xff1a;https://javaxiaobear.cn 我们知道&#xff0c;高并发代表着大流量&#xff0c;高并发系统设计的魅力就在于我们能够凭借自己的聪明才智设计巧妙的方案&#xff0c;从而抵抗巨大流量的冲击&#xff0c;带给用户更好的使用体验。这些方案好似能…

Kerberos 高可用配置和验证

参考 https://cloud.tencent.com/developer/article/1078314 https://mp.weixin.qq.com/s?__bizMzI4OTY3MTUyNg&mid2247485861&idx1&snbb930a497f63ac5e63ed20c64643eec5 机器准备 Kerberos主 ip-172-31-22-86.ap-southeast-1.compute.internal 7.common2.hado…

【洛谷算法题】P5715-三位数排序【入门2分支结构】

&#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5715-三位数排序【入门2分支结构】&#x1f30f;题目描述&#x1f30f;输入格式…