【Qt+Python项目构建】- 02 Qt creator 14.0 + PySide6 如何让图像控件的尺寸变化和窗口一致

news2024/10/10 7:08:33

前言:【这是个AI不会回答的问题】

Qt Creator 新的版本又发出了,Pyside6 有很多新功能。但是,一些传统的方法要被淘汰了。

一个经典的例子是:

我有个一个图像要显示在Form里面的图像控件上,OK, 我现在拖拽编程,把图像控件搞到Form( Qt 叫Widget)后,然后我抓一个 graphicView的图像控件。

调好了尺寸,运行。

然后,

我准备双击,最大化一下Form的窗口大小,然后,

就发现,放大的只有Widget , graphicView 仍然是那个大小没变动啊。

【Python + QT 构建GUI的方式和 C# 的方式有很大不同,这种图像匹配控件的情况,在C# 应该是设定一下,图像控件的某个属性就可以了。QT 里面,确实是要复杂一点,需要考虑layout的整个定义和设计】


任务:拖拽编程要求

 在一个父 Widget中,加一个tabWidget,然后,在tabWidget里面加一个graphicsView

目标,让要让 tabWidget 的大小随着其父 Widget 的变化而变化,同时tabWidget里面的graphicsView也一起变化:

比如这样:


环境:

Qt Creator 14.0.1

Based on Qt 6.7.2 (MSVC 2019, x86_64)

Built on Aug 6 2024 00:17:40

 


老版本的方法:

  • 打开Qt Designer:启动Qt Designer并打开你的.ui文件。

  • 添加QTabWidget:在工具箱中找到QTabWidget控件,将其拖放到你的主窗口(QWidget)中。

  • 设置布局:选中QTabWidget,然后在属性编辑器中找到“布局”属性。你可以选择“LAYOUT IN A BOX”或者直接选择一个布局,比如QVBoxLayout

  • 添加标签页:双击QTabWidget来添加标签页,或者在属性编辑器中设置标签页的数量和标题。

  • 调整大小策略:为了确保QTabWidget能够随着窗口大小的变化而变化,你可以在属性编辑器中找到QTabWidget的“大小策略”属性,并设置为“Expanding”,这样它就会填充整个可用空间。

  • 保存并使用.ui文件:保存你的.ui文件,然后在你的PySide6应用程序中加载它。

import sys
from PySide6.QtWidgets import QApplication, QWidget, QTabWidget, QVBoxLayout

class MyWidget(QWidget):
    def __init__(self):
        super().__init__()

        # 创建一个QTabWidget
        self.tabWidget = QTabWidget()
        self.tab1 = QWidget()
        self.tab2 = QWidget()

        # 为tabWidget添加标签页
        self.tabWidget.addTab(self.tab1, "Tab 1")
        self.tabWidget.addTab(self.tab2, "Tab 2")

        # 创建布局管理器
        layout = QVBoxLayout()
        layout.addWidget(self.tabWidget)

        # 设置布局管理器到窗口
        self.setLayout(layout)

        # 调整窗口大小
        self.resize(400, 300)

        # 双击窗口时调整大小
        self.installEventFilter(self)

    def eventFilter(self, source, event):
        if source is self and event.type() == QEvent.MouseButtonDblClick:
            self.resize(800, 600)
            return True
        return super().eventFilter(source, event)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    widget = MyWidget()
    widget.show()
    sys.exit(app.exec())

 【案,这个完全不适合我的新版本。在新版本里面,QVBoxLayout,根本不存在,而且,属性框里,“LAYOUT IN A BOX”也没有。所以,需要创建新的修改方法】


 新版本的方法:

 【案,QT creator 新版本的布局,已经不放在控件的属性框里面了,而是需要【右键】打开】

 1 案例里面控件对象的列表:

2 布局的设定

2.1 拖拽一个主Wiidget并布局如下:

他的属性如下图:

我们需要关注红框里的设定,这个会影响我们要做的任务:

2.2 拖拽一个gridlayout(对齐用,也可以不用)

放到Widget里面,并拉满

 2.3 拖拽一个tabWidget(选一个图像控件的容器,我选了这个Tab控件)

放到gridlayout里面,然后,拉满。

拉满这里有一个非常关键的一步:

选择,在窗体布局里面布局,我这里灰色,是因为我已经这么设定了

这样,布局和空间就绑定了,然后这个geometry应该是不能选的,这时候就是拉满了,否则,你还是没有设定好。

 

 2.4 在tab(某个tab 页)里面拖拽一个加入一个graphicsView

2.4.1 刚拉入的时候,还没有绑定layout

上例中,tab3就没有绑定layout,也就是没有做布局的处理。

2.4.2 本例,在tab3右键,选择【在窗体中布局】

这时候,所有的选项都是灰色的,那是因为Tab页上面,啥也没有,根本不需要布局

现在,我们把图像控件graphicView从工具箱里面拉动过来:再右键,

这时候,就可以设定【在窗体布局中布局了】

我们选择这个选项,点击,后会自动布局了,不过还需要调整一下。

这样,这个就拉满了。

后面运行,双击窗体后,放大最大后,Tab的里面图像的窗体也会自动匹配了。

一定要拉满:他才会跟随

同样,要选择在窗体布局里面布局

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

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

相关文章

Unity实现自定义图集(一)

以下内容是根据Unity 2020.1.0f1版本进行编写的   Unity自带有图集工具,包括旧版的图集(设置PackingTag),以及新版的图集(生成SpriteAtlas)。一般来说,unity自带的图集系统已经够用了,但是实际使用上还是存在一些可优化的地方,例如加载到Canvas上的资源,打图集不能…

JVM(学习预热 - 走进Java)(持续更新迭代)

目录 一、彻底认识Java虚拟机 开创世纪:Sun Classic 开创世纪:Exact VM 武林霸主:HotSpot VM 移动端虚拟机:Mobile/Embedded VM “三大”其二:BEA JRockit/IBM J9 VM 软硬结合:BEA Liquid VM/Azul VM…

更新子节点的优化策略1:目标old节点的位置预测

更新子节点的优化策略1:目标old节点的位置预测: 如果 oldStartVnode 和 newStartVnode 是同一个节点,直接 patchVnode,同时 oldStartIdx、newStartIdx 索引都加 1(向右移动)如果 oldEndVnode 和 newEndVno…

PE结构之 重定位表

那么,我们找到了某个 需要修改的绝对地址 的RVA, 将这个RVA转换成FOA后,这个绝对地址是读DWORD ,还是QWORD? 就是说,32位和64位是否有区别? 实验: 找到重定位表的数据,并观察在内存中和文件中的区别 将引用dll的exe文件,设置一下基址 同时DLL文件的基址和EXE文件设置一样,并…

肝了4天,我用ChatTTS和LLM让deeplearning.ai课程说上流畅中文

以下是「 豆包MarsCode 体验官」优秀文章,作者X2046。 我们都知道外网上有很多优秀的视频教程平台,比如 Coursera 和 deeplearning.ai。尤其是后者,由吴恩达老师与OpenAI、Langchain、LlamaIndex、AutoGen等公司和作者合作,推出了…

Spring Cloud Netflix Hystrix 熔断器讲解和案例示范

在分布式微服务架构中,每个服务之间相互依赖,当某个服务出现故障或延迟时,如果没有有效的故障隔离机制,可能导致整个系统雪崩式的失败。Netflix Hystrix 作为一种熔断器模式,旨在通过隔离服务之间的调用,提…

通过移动访问控制增强数据中心安全性

在当今数据驱动的世界里,信息是新的黄金标准,数据中心安全已成为每个 IT 部门的首要任务。数据隐私和道德管理不再仅仅是最佳实践,而是法律要求。因此,风险比以往任何时候都要高。 然后是内部威胁问题。根据 IBM 的 《2024 年数据…

Python案例--copy复制

在Python编程中,数据的复制是一个常见且重要的操作,它涉及到赋值、浅拷贝和深拷贝三种不同的概念。正确理解这三种操作对于编写高效且正确的程序至关重要。本文将通过一个简单的Python示例,探讨这三种数据复制方式的区别及其应用场景&#xf…

数据结构 ——— 单链表oj题:环状链表(求出环的入口节点)

目录 题目要求 手搓一个简易带环链表 代码实现 题目要求 给定一个链表的头节点 head,返回链表开始入环的第一个节点,如果链表无环,则返回NULL 手搓一个简易带环链表 代码演示: struct ListNode* n1 (struct ListNode*)mal…

深度学习:循环神经网络—RNN的原理

传统神经网络存在的问题? 无法训练出具有顺序的数据。模型搭建时没有考虑数据上下之间的关系。 RNN神经网络 RNN(Recurrent Neural Network,循环神经网络)是一种专门用于处理序列数据的神经网络。在处理序列输入时具有记忆性…

Mac上强大的菜单栏管理工具

想要Mac用的好,各种工具少不了,一款好用的软件对于提高使用效率和使用舒适度来说非常必要,iBar-强大的菜单栏图标管理工具 随着 Mac 运行的软件增加,状态栏中的图标也越来越多,不仅看得眼花缭乱,而且刘海屏…

基于SpringBoot+Vue的农场管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…

ORM框架简介

什么是ORM? ORM(Object-Relational Mapping,对象关系映射)是一种编程技术,用于在关系数据库和对象程序语言之间转换数据。ORM框架允许开发者以面向对象的方式来操作数据库,而不需要编写复杂的SQL语句。简单…

CMake 属性之目录属性

【写在前面】 CMake 的目录属性是指在特定目录(及其子目录)范围内有效的设置。 这些属性不同于全局变量或目标(Target)属性,它们提供了一种机制,允许开发者为项目中的不同部分定义不同的构建行为。 通过目录…

HarmonyOS NEXT应用开发实战(二、封装比UniApp和小程序更简单好用的网络库)

网络访问接口,使用频次最高。之前习惯了uniapp下的网络接口风格,使用起来贼简单方便。转战到鸿蒙上后,原始网络接口写着真累啊!目标让鸿蒙上网络接口使用,简单程度比肩uniapp,比Axios更轻量级。源码量也不多…

Spring Cloud全解析:链路追踪之springCloudSleuth简介

文章目录 springCloudSleuth简介链路追踪?SpringCloudSleuth术语链路示意图zipkin依赖配置 springCloudSleuth简介 链路追踪? 什么是链路追踪?就是将一次分布式请求还原成调用链路,将一次分布式请求的调用情况集中展示&#xff…

SpringBoot教程(二十四) | SpringBoot实现分布式定时任务之Quartz(多数据源配置)

SpringBoot教程(二十四) | SpringBoot实现分布式定时任务之Quartz(多数据源配置) 前言多数据源配置引入aop依赖1. properties配置多数据源2. 创建数据源枚举类3. 线程参数配置类4. 数据源动态切换类5. 多数据源配置类HikariCP 版本…

【JS】用哈希法得到四数相加元组数

思路 根据题目这里是四个数组abcd的数相加,将数组两两分组,A大组为ab,B大组为cd由abcd0可得AB0,即B0-A遍历数组分别计算出AB大组所有sum值,先将A组sum值存进map里,再从map里面寻找有count个合适的B值&#…

Python in Excel 正式发布!

Excel 中的 Python 现已正式发布,适用于 Microsoft 365 商业版和企业版的 Windows 用户。去年 8 月,微软与 Anaconda 合作,通过集成 Python 为 Excel 引入了一个令人兴奋的新增功能,从而可以将 Python 和 Excel 分析无缝结合到同一…

使用npm i报错node-sass失败问题解决

node 版本:v14.15.4 解决方法: npm config set sass_binary_sitehttps://npmmirror.com/mirrors/node-sass设置完之后,再npm i 就可以下载成功 亲测有效