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

news2024/11/30 11:45:23

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控件。

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

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

相关文章

接收网络包的过程—— IP层->TCP层->Socket层

在 tcp_v4_rcv 中&#xff0c;得到 TCP 的头之后&#xff0c;我们可以开始处理 TCP 层的事情。因为 TCP 层是分状态的&#xff0c;状态被维护在数据结构 struct sock 里面&#xff0c;因而我们要根据 IP 地址以及 TCP 头里面的内容&#xff0c;在 tcp_hashinfo 中找到这个包对应…

使用Rust开发小游戏

本文是对 使用 Rust 开发一个微型游戏【已完结】[1]的学习与记录. cargo new flappy 在Cargo.toml的[dependencies]下方增加: bracket-lib "~0.8.7" main.rs中: use bracket_lib::prelude::*;struct State {}impl GameState for State { fn tick(&mut self,…

电子学会C/C++编程等级考试2021年06月(三级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:数对 给定2到15个不同的正整数,你的任务是计算这些数里面有多少个数对满足:数对中一个数是另一个数的两倍。 比如给定1 4 3 2 9 7 18 22,得到的答案是3,因为2是1的两倍,4是2个两倍,18是9的两倍。 时间限制:1000 内存限制…

FilterChain攻击解析及利用

文章目录 BASE64解码和编码原理浅析EncodingDecoding Filterchain构造&#xff08;原理阐述&#xff09;回顾死亡代码特性一&#xff08;双重去杂&#xff09;特性二&#xff08;粘合性&#xff09; 任意字符构造工具一工具二 实战例题[NSSRound#7 Team]brokenFilterChain&…

二分 模板

好久没更新博客了&#xff0c;之前一直在准备比赛&#xff0c;忙着学算法和写题&#xff0c;今天写了一道二分答案的题&#xff0c;发现之前那种二分写法有一丢丢的问题&#xff0c;导致有道题只能过97%的点。 emmm,还是把最经典的二分的板子写在这记录下&#xff08;这里参考…

基于springboot校园车辆管理系统

背景 伴随着社会经济的快速发展&#xff0c;机动车保有量不断增加。不断提高的大众生活水平以及人们不断增长的自主出行需求&#xff0c;人们对汽车的 依赖性在不断增强。汽车已经发展成为公众日常出行的一种重要的交通工具。在如此形势下&#xff0c;高校校园内的机动车数量也…

7.23 SpringBoot项目实战【评论】

文章目录 前言一、编写控制器二、编写服务层三、Postman测试前言 我们在 7.4 和 7.20 都曾实现过 评论列表,本文我们继续SpringBoot项目实战 评论 功能。逻辑实际相当Easy:一个学生 对 任意书 都可以 多次评论,但需要经过审核! 回顾一下 4.2 的数据库设计,学生图书评论表…

CANdelaStudio 使用教程4 编辑State

文章目录 简述1、State Groups2、Dependencies3、 Defaults State1、 会话状态2、 新增会话状态3、 编辑 服务对 State 的依赖关系 State Diagram 简述 1、State Groups 2、Dependencies 在这里&#xff0c;可以编辑现有服务在不同会话状态或安全访问状态的支持情况和状态转换…

地铁在线售票vue票务系统uniAPP+vue 微信小程序

功能介绍 管理员 &#xff08;1&#xff09;管理员登录功能 &#xff08;2&#xff09;查看和修改线路信息 &#xff08;3&#xff09;减少线路 &#xff08;4&#xff09;修改价格&#xff08;5站3元 5-10 5元 10-15站6元 往上8元&#xff09; &#xff08;5&#xff09;删除用…

每日一题--相交链表

离思五首-元稹 曾经沧海难为水&#xff0c;除却巫山不是云。 取次花丛懒回顾&#xff0c;半缘修道半缘君。 目录 题目描述&#xff1a; 思路分析&#xff1a; 方法及时间复杂度&#xff1a; 法一 计算链表长度(暴力解法) 法二 栈 法三 哈希集合 法四 map或unordered_map…

C语言学习笔记之函数篇

与数学意义上的函数不同&#xff0c;C语言中的函数又称为过程&#xff0c;接口&#xff0c;具有极其重要的作用。教科书上将其定义为&#xff1a;程序中的子程序。 在计算机科学中&#xff0c;子程序&#xff08;英语&#xff1a;Subroutine, procedure, function, routine, me…

案例030:基于微信小程序的英语学习交流平台

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

关于 raw 图像的理解

1、问题背景 在图像调试过程&#xff0c;当发现一个问题时&#xff0c;很多时候都要通过 dump raw图像来分析&#xff0c;如果raw图像上有&#xff0c;那就排除了是 ISP的处理导致。 下一步就是排查 sensor 或者镜头&#xff0c;这样可以有效的帮我们定位问题所在。 但遇到过…

成为AI产品经理——TPR、FPR、ROC、AUC

目录 一、PR图、BEP 1.PR图 2.BEP 二、灵敏度、特异度 1.灵敏度 2.特异度 三、真正率、假正率 1.真正率 2.假正率 三、ROC、AUC 1.ROC 2.AUC 四、KS值 一、PR图、BEP 1.PR图 二分类问题模型通常输出的是一个概率值&#xff0c;我们需要设定一个阈值&#xff…

P16 C++构造函数

目录 前言 01 什么是构造函数呢&#xff1f; 02 非构造函数初始化变量 03 构造函数初始化变量 04 带参数的构造函数。 最后的话 前言 我们继续学习 C 的面向对象编程&#xff0c;本章主要是讲其中的 构造函数。 01 什么是构造函数呢&#xff1f; 构造函数基本上是一种特…

2023年最新Visual Studio下载安装以及C语言环境搭建教程(含C语言入门教程)

文章目录 写在前面C语言简介Visual Studio简介Visual Studio安装教程 C语言入门Visual Studio使用教程 写在后面 写在前面 2023年最新Visual Studio下载安装以及C语言环境搭建教程来啦&#xff01;一起来看看吧~ C语言简介 C语言是一种高级编程语言&#xff0c;由美国贝尔实…

卷积神经网络经典backbone

特征提取是数据分析和机器学习中的基本概念&#xff0c;是将原始数据转换为更适合分析或建模的格式过程中的关键步骤。特征&#xff0c;也称为变量或属性&#xff0c;是我们用来进行预测、对对象进行分类或从数据中获取见解的数据点的特定特征或属性。 1.AlexNet paper&#…

NX二次开发UF_CURVE_ask_wrap_curve_parents 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_ask_wrap_curve_parents Defined in: uf_curve.h int UF_CURVE_ask_wrap_curve_parents(tag_t curve_tag, tag_t * defining_face, tag_t * defining_plane, tag_t * defin…

【单调栈】子数组的最小值之和

import java.util.Deque; import java.util.LinkedList;/** 参考链接&#xff1a;https://leetcode.cn/problems/sum-of-subarray-minimums/solutions/1930857/gong-xian-fa-dan-diao-zhan-san-chong-shi-gxa5/* https://leetcode.cn/problems/sum-of-subarray-minim…

gitee仓库使用教程

下载安装git&#xff1b;在本地项目文件夹右击鼠标点击Git Bash Here;输入git init&#xff0c;这个目录变成git可以管理的仓库&#xff0c;会出现一个.git文件夹&#xff0c;如果没出现的话需要选择“显示隐藏文件”&#xff08;不会的同学自行百度一下&#xff09; 4.绑定本地…