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 WidgetQTreeWidget *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.mzph.cn/news/172273.shtml

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

相关文章

excel表中慎用合并单元格,多用跨列居中

如下一个excel例表&#xff1a; 要将首行居中&#xff0c;最好的办法如下&#xff1a; 1、选中首行单元格 2、按下ctrl1&#xff0c;调出“设置单元格格式”&#xff0c;选中“对齐”&#xff0c;在“水平对齐”中选择“跨列居中” 3、完成任务 这样居中的好处是&#xff1a;可…

【NeRF】3、MobileR2L | 移动端实时的神经光场(CVPR2023)

论文&#xff1a;Real-Time Neural Light Field on Mobile Devices 代码&#xff1a;https://github.com/snap-research/MobileR2L 出处&#xff1a;CVPR2023 贡献&#xff1a; 设计了一套移动端实时的 R2L 网络结构 MobileR2L&#xff0c;在 iphone13 上渲染一张 1008x756…

RC-MVSNet:无监督的多视角立体视觉与神经渲染--论文笔记(2022年)

RC-MVSNet&#xff1a;无监督的多视角立体视觉与神经渲染--论文笔记&#xff08;2022年&#xff09; 摘要1 引言2 相关工作2.1 基于监督的MVS2.2 无监督和自监督MVS2.3 多视图神经渲染 3 实现方法3.1 无监督的MVS网络 Chang, D. et al. (2022). RC-MVSNet: Unsupervised Multi-…

帮管客CRM SQL注入漏洞复现

0x01 产品简介 帮管客CRM是一款集客户档案、销售记录、业务往来等功能于一体的客户管理系统。帮管客CRM客户管理系统&#xff0c;客户管理&#xff0c;从未如此简单&#xff0c;一个平台满足企业全方位的销售跟进、智能化服务管理、高效的沟通协同、图表化数据分析帮管客颠覆传…

【深度学习实验】图像处理(二):PIL 和 PyTorch(transforms)中的图像处理与随机图片增强

文章目录 一、实验介绍二、实验环境1. 配置虚拟环境2. 库版本介绍 三、实验内容0. 导入需要的工具包1. PIL图像处理a. 生成绿色和蓝色图像b. 缩放和合成图像c 在合成图像上添加文字d. 展示并保存图像 2. PIL随机图像增强a. 定义随机图像增强函数b. 实验结果展示 3. PyTorch&…

redis实现消息延迟队列

业务场景 在很多软件系统功能中都会出现定时任务的业务场景,比如提前点单,比如定时发布动态,文章等而出现这样的的定时的任务为延迟队任务 代码模块 任务的持久化一般都需要建立一个任务表和任务日志表,避免宕机导致任务失效,先新建立一个数据库,创建基本的任务表和任务日志表…

【MOJO】Modular语言安装和测试

目录 一、Mojo介绍 Linux​ Mac 二、安装Mojo SDK 三、mojo代码测试 3.1、在 REPL 中运行代码​ 3.2、构建并运行 Mojo 源文件​ 运行mojo文件​ 构建可执行二进制文件​ 四、VSCode安装 一、Mojo介绍 在学习Rust语言的过程中无意发现了Modular语言&#xff0c;语言…

nginx基础篇学习

一、nginx编译安装 1、前往nginx官网获取安装包 下载安装包 2、解压 3、安装 进入安装包 安装准备&#xff1a;nginx的rewrite module重写模块依赖于pcre、pcre-devel、zlib和zlib-devel库&#xff0c;要先安装这些库 安装&#xff1a; 编译&#xff1a; 启动&#xff…

web前端之vue和echarts的堆叠柱状图顶部显示总数、鼠标悬浮工具提示、设置图例的显示与隐藏、label、legend、tooltip

MENU 效果图htmlJavaScripstyle解析 效果图 html <template><div><div><div id"idStackedColumnChart" style"width: 100%; height: 680px"></div></div></div> </template>JavaScrip export default {…

python-opencv轮廓检测(外轮廓检测和全部轮廓检测,计算轮廓面积和周长)

python-opencv轮廓检测&#xff08;外轮廓检测和全部轮廓检测&#xff0c;计算轮廓面积和周长&#xff09; 通过cv2.findContours&#xff0c;我们可以进行轮廓检测&#xff0c;当然也有很多检测模式&#xff0c;我们可以通过选择检测模式&#xff0c;进行外轮廓检测&#xff…

通过ros系统中websocket中发送sensor_msgs::Image数据给web端显示(二)

通过ros系统中websocket中发送sensor_msgs::Image数据给web端显示(二) mp4媒体流数据 #include <ros/ros.h> #include <signal.h> #include <sensor_msgs/Image.h> #include <message_filters/subscriber.h> #include <message_filters/synchroniz…

从零开始学习管道:管道程序的优化和文件描述符继承问题

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;Linux &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 本博客主要内容管道后续的完善&#xff0c;以及解决管道继承多个文件描…

【Amazon】基于Amazon提供的托管式EKS通过eksctl命令部署Kubernetes集群

文章目录 一、使用CloudFormation创建堡垒机二、安装AWS CLI命令行工具三、安装eksctl命令行工具四、创建集群角色4.1 集群服务角色创建4.2 集群节点组角色创建 五、创建 EKS集群六、登录EKS控制台七、参考链接 一、使用CloudFormation创建堡垒机 导航至CloudFormation&#xf…

python类和对象

1.使用对象组织数据 class Student:nameNone #记录名字 stu1Student() #创建对象 stu1.name"abc" #为对象属性赋值2.类的定义和使用 2.1成员方法的定义语法 传参的时候self是透明的&#xff0c;不用管 class Stu:nameNonedef sayHi(self):print(f"你好&#x…

【数据中台】开源项目(1)-LarkMidTable

LarkMidTable 是一站式开源的数据中台&#xff0c;实现中台的 基础建设&#xff0c;数据治理&#xff0c;数据开发&#xff0c;监控告警&#xff0c;数据服务&#xff0c;数据的可视化&#xff0c;实现高效赋能数据前台并提供数据服务的产品。 系统演示地址 &#xff1a; www.l…

Windows 7隐藏用户测试

请注意Window 7是在虚拟机上安装的&#xff0c;ip是192.168.0.108。 下边都是在虚拟机Window 7上操作&#xff0c;直到最后远程连接才在自己本机Windows 11上操作。 需要同时按下Windowsr,然后输入cmd&#xff0c;再点击确定。 在命令上里边输入net user可以显示一下用户。 …

C语言学习笔记之函数篇

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

React 入门使用 (官方文档向 Part2)

文章目录 用 State 响应输入声明式地考虑 UI步骤 1&#xff1a;定位组件中不同的视图状态步骤 2&#xff1a;确定是什么触发了这些状态的改变步骤 3&#xff1a;通过 useState 表示内存中的 state步骤 4&#xff1a;删除任何不必要的 state 变量步骤 5&#xff1a;连接事件处理…

059-第三代软件开发-巧用工控板LED指示灯引脚

第三代软件开发-巧用工控板LED指示灯引脚 文章目录 第三代软件开发-巧用工控板LED指示灯引脚项目介绍巧用工控板LED指示灯引脚第一种方式第二种方式 总结 关键字&#xff1a; Qt、 Qml、 Power、 继电器、 IO 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项…

video标签在h5中被劫持问题

将video的视频链接转为blob export const encryptionVideo (options: URL) > {return new Promise((resolve, reject) > {window.URL window.URL || window.webkitURL;var xhr new XMLHttpRequest();xhr.open(GET, options.url, true);xhr.responseType blob;xhr.onl…