首页
学习
活动
专区
圈层
工具
发布

【从零开始的Qt开发指南】(九)Qt 常用控件之显示类控件(下):ProgressBar 与 CalendarWidget 实战进阶

问题 4:百分比计算错误(如最大值不是 100 时 % p 显示异常) 原因:%p占位符会自动根据(value - minimum)/(maximum - minimum)计算百分比,与最大值是否为 100...二、CalendarWidget 控件:日期选择的标准化解决方案 QCalendarWidget 是 Qt 提供的日历控件,支持日期选择、月份 / 年份切换、日期范围限制等功能,无需手动绘制日历界面...时未先调用QCalendarWidget::paintCell,覆盖了默认样式; 解决方案: 参考 Qt 官方文档,使用正确的 QSS 选择器; 重写paintCell时,先调用父类方法绘制默认样式...,再绘制自定义内容。...如果本文对你有帮助,欢迎点赞、收藏、转发,如有疑问或建议,欢迎在评论区留言交流~ 后续将推出 Qt 控件系列其他文章,敬请期待!

23221
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Qt Designer基本控件介绍——Display Widgets(显示小部件)

    ,需要用槽函数与这个信号进行绑定 详细使用示例可参考博客“PyQt5基本控件详解之QLabel(三)” Text Browser : 文本浏览框 使用html就可以向Qtextbrowser里插入图片,...__init__() # 使用super函数可以实现子类使用父类的方法 self.setWindowTitle("记事本") self.setWindowIcon(QIcon...setCacheMode(): 设置缓存模式,这个属性控制视图的哪一部分存储在缓存中,QGraphicsView可以预存一些内容在QPixmap中,然后被绘制到视口上,这样做的目的是加速整体区域重绘的速度...sdrScale) self.setLayout(fLayout) def onRotateValueChanged(self, value): # 是个累积效应,先对变化矩阵进行复位操作...value) def onScaleValueChanged(self, value): s = 0.5 + value / 100.0 # 是个累积效应,先对变化矩阵进行复位操作

    9.6K20

    【QT】 控件 -- 显示类

    函数我们没有手动调用,但是能在窗口大小变化时被自动调用,这个过程就是依赖 C++ 中的多态来实现的。...的子类,也就是我们自己写的 Widget 此时虽然是通过父类调用函数,但是实际上执行的是子类的函数(也就是我们重写后的 resizeEvent) 获取到窗口的 event,进行 resize 处理 此处属于是多态机制的...而我们自己创建的线程则不是,当我们自己的线程中尝试对界面元素进行修改时,Qt 程序往往会直接崩溃。...这样的约定主要是因为 GUI 中的状态往往是牵一发动全身的,修改一个地方,就需要同步的对其他内容进行调整。 比如调整了某个元素的尺存,就可能影响到内部的文字位置,或者其他元素的位置。...通过 定时器周期触发信号,主线程调用对应的 slot 函数,再在 slot 函数中对当前的任务进度进行计算,并更新进度条的界面效果。

    1.4K10

    初步学习Qt布局

    当可用空间发生变化时,这些布局将自动调整widgets的位置和大小,以确保它们布局的一致性和用户界面主体可用。 所有QWidget的子类都可以用布局来管理它们的子类。...这个可以通过将问题控件作为子类来解决,并实现合适的sizeHint()和minimumSizeHint()函数。 在一些情况下,当布局被添加到widget时需要特别注意。...实现QWidget::resizeEvent()来计算所需的大小分配并在每个子类中调用setGeometry() 。...在通过函数中,需要再次使用,最好将结果保存在本地变量中。 在同样函数的同一个元素中,不应该调用两次 QLayoutItem::setGeometry()。...布局 布局是一个种高雅而灵活的方式来自动把子类窗体小部件组织到它们的容器中。每个窗体小部件通过sizeHint和sizePolicy属性向布局提供大小需求,布局根据可用空间进行分配。

    8.1K10

    Spread for Windows Forms高级主题(8)---通过暂停布局提高性能

    使用布局对象的目的是,通过保存绘制控件过程所使用已计算好的布局值,每次控件重画时重新使用它们而不是每次都进行重算,来优化控件的绘制。...如果控件的状态变成这样,说明布局对象包含了非法的数据(大多数情况下为错误的数值),当控件使用非法的布局数据绘制时就会导致异常发生。...这些只会在使用SuspendLayout方法暂停布局时才会发生,然后对控件状态所做的改变也会生效,控件也会以某种方式使用非法的布局对象进行再次绘制。...也可能存在这样的异常,它导致上述消息的显示,但却与暂停布局无关;例如,IRenderer.PaintCell方法调用过程中由自定义单元格类型对象抛出的异常。...如果你使用了AllowCellOverflow属性,将其关闭可以提高布局计算的性能,因为每次对单元格中的数据进行修改时,这个特性需要许多对文本宽度的计算。

    2.2K60

    深度解析开闭原则:面向对象设计的基石与实践指南

    它简洁而深刻地指出:软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。这一原则看似简单,却蕴含着丰富的内涵,深刻影响了现代软件架构的设计模式、技术选型以及整个软件开发过程的方方面面。...当面对新的业务需求时,例如新增一种促销活动或者支付方式,如果直接对这些核心逻辑进行修改,将会带来极大的风险。因为核心逻辑通常与系统的多个部分紧密耦合,一处修改可能引发连锁反应,导致意想不到的错误出现。...以图形绘制系统为例,系统中可能存在多种图形类型,如圆形、矩形、三角形等。我们可以定义一个抽象的图形类,其中包含绘制图形的抽象方法。...这就保证了在扩展系统功能,增加新的图形子类时,原有的代码可以无缝地使用这些新的子类对象,无需对原有代码进行修改。...在软件系统中,当存在多个对象之间存在依赖关系,并且一个对象的状态发生变化时,需要通知其他依赖它的对象做出相应的反应,同时又希望这些对象之间的耦合度尽可能低时,观察者模式就发挥出了巨大的优势。

    46810

    设计模式—–开放封闭原则

    当需求变化时,你可以通过添加新的代码来扩展这个模块的行为,而不去更改那些已经存在的可以工作的代码。...注意在这里如果我们想扩展 DrawAllShapes 函数的行为来绘制一个新的图形种类,我们所需要做的就是增加一个从 Shape 类衍生的子类。而DrawAllShapes 函数则无需进行修改。...例如,试想上面的 Shape 示例,如果我们现在决定所有的 Circle 都应该在 Square 之前先进行绘制,则 DrawAllShapes 函数将会发生什么呢?...使用抽象来获取显示地闭合 那我们该如何使 DrawAllShapes 函数对绘制逻辑中的排序的变化保持闭合呢?要记住闭合是基于抽象的。...因此,为了使 DrawAllShapes 对排序闭合,则我们需要对排序进行某种程度的抽象。上述例子中关于排序的一个特例就是某种类别的图形需要在其他类别的图像之前进行绘制。

    1.1K10

    PyQt5 基本窗口控件(绘图类 拖拽 剪贴板 日历时间 菜单、工具、状态栏 打印)

    窗口绘图类 1.1 QPainter 绘制文字 绘制点 1.2 QPen 1.3 QBrush 1.4 QPixmap 2. 拖拽与剪贴板 2.1 拖拽 2.2 剪贴板 QClipboard 3....窗口绘图类 1.1 QPainter 在 QWidget上执行绘图操作 在QWidget.paintEvent() 中完成,绘制方法必须在 QtGui.QPainter对象的 begin() 和 end...size = self.size() print('size,', size) for i in range(1000): # 绘制正弦函数曲线...sys.exit(app.exec_()) 选中一些文字,按住 Ctrl 移动鼠标到 下拉列表处 2.2 剪贴板 QClipboard QApplication类有一个静态方法clipboard(), 它返回对剪贴板对象的引用...任何类型的MimeData都可以从 剪贴板 复制或粘贴 常用信号:dataChanged 剪贴板内容发生变化时 发射信号 # _*_ coding: utf-8 _*_ # @Time : 2022/

    2.5K22

    Java 面向对象进阶之多态:从概念到实践的深度解析

    多态的存在,使得代码的编写和维护更加简洁、高效,符合软件开发中的开闭原则,即对扩展开放,对修改关闭。 多态的实现基于三个关键要素:继承、方法重写和父类引用指向子类对象。...继承是多态的基础,通过继承,子类可以获得父类的属性和方法,并在此基础上进行扩展和修改;方法重写是多态的具体体现,子类通过重写父类的方法,实现不同的行为逻辑;而父类引用指向子类对象,则是多态在运行时的表现形式...提高代码的可维护性和扩展性 在软件开发中,需求经常会发生变化。使用多态可以使得代码在面对变化时更加灵活。例如,在一个图形绘制程序中,有一个Shape类作为父类,包含一个draw方法用于绘制图形。...例如,如果父类方法的访问权限是protected,那么子类重写后的方法访问权限可以是protected或public,但不能是private。否则,会导致编译错误。 2....当通过父类引用调用静态方法时,实际调用的是父类中的静态方法,而不会根据引用的子类对象动态地选择方法。 3. 构造方法与多态 构造方法不能被继承和重写,因此也不存在多态的概念。

    25010

    还不理解 OCP 的开放程度?赶紧了解下

    OCP 简介 开闭原则,是面向对象设计中的重要原则之一,其核心思想是:软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。...这样,当需求变化时,我们只需要增加新的实现类即可,而无需修改已有的代码。 多态 利用多态性质,通过父类或接口的引用来调用子类的方法。这样做可以在不改变原有代码的情况下,对系统行为进行扩展和定制。...Override public void draw() { System.out.println("Drawing a triangle"); } } 我们可以通过使用这些子类来绘制不同的形状...这样做可以降低引入新错误的风险,并且在整个系统中保持相对稳定的状态。 可维护性:当需求变化时,我们只需要添加新的代码,而不是修改已有的代码。...通过将可变的部分进行抽象,并通过多态来处理变化,我们可以实现对扩展开放、对修改关闭的设计。这有助于降低代码的耦合度并提高系统的可拓展性。

    38930

    【设计模式】 面向对象六大设计原则

    单一职责示例 (1) 反面示例 示例要求 : 创建一个绘图系统 -- 绘图 : 可以绘制圆形, 矩形; -- 显示 : 显示绘制好的图形; UML 图 : 明显下图不符合单一职责原则, 绘制圆形, 矩形...里氏替换简介 (1) 里氏替换定义 里氏替换 : 所有 引用基类的地方 必须能 透明地使用其子类的对象; -- 子类替换父类 : 只要 父类出现的地方子类就可以出现, 替换为子类也不会产生任何错误, 使用者不需要知道父类还是子类..., 即构造函数注入; (3) 接口注入依赖对象 注入方法 : 在接口方法的参数中声明依赖对象, 即接口注入; 3....属性和方法, 并声明与其它对象的依赖关系; -- 抽象类 : 负责公共构造部分实现; -- 实现类 : 准确地实现业务逻辑, 适当时候对父类进行细化; 4....开闭原则定义 开闭原则定义 : 软件的实体 类, 模块, 函数 应该对扩展开放, 对修改关闭; 即 软件实体 应该 通过扩展实现变化, 不是通过 修改已有的代码实现变化; -- 软件实体 : 软件产品中得

    1.4K10

    金九银十前端面试题总结(附答案)

    其位置发生改变,就会重新进行绘制。...预处理器普遍会具备这样的特性:嵌套代码的能力,通过嵌套来反映不同 css 属性之间的层级关系 ;支持定义 css 变量;提供计算函数;允许对代码片段进行 extend 和 mixin;支持循环语句的使用...:原型中包含的引用类型属性将被所有实例对象共享子类在实例化时不能给父类构造函数传参构造函数继承核心思想:在子类构造函数中调用父类构造函数实现:function SuperType(name) {...优点是可以在子类构造函数中向父类构造函数传参。它存在的问题是:1)由于方法必须在构造函数中定义,因此方法不能重用。2)子类也不能访问父类原型上定义的方法。...:父类构造函数始终会被调用两次:一次是在创建子类原型时new SuperType()调用,另一次是在子类构造函数中SuperType.call()调用。

    1.2K40

    ——C++中的多态

    被调用的函数必须是虚函数,并且派生类完成了对基类的虚函数的重写/覆盖:虚函数是在基类中声明,并在一个或多个派生类中被重写的函数。...这些错误在编译期间可能不会立即被检测出来,因为C++编译器在默认情况下并不会对虚函数的重写进行严格的类型检查。...,然后调用A的析构函数 return 0; } 重载/重写/隐藏的对比 这里我们来简单进行一下重载/重写/隐藏的对比 重载(Overloading) 定义:在同一作用域内,允许存在多个同名函数,但这些函数的参数列表必须不同...对比总结 重载是在同一作用域内对同名函数进行扩展,通过不同的参数列表来区分。 重写/覆盖是在继承关系中,子类提供基类虚函数的特定实现,实现多态性。...我们一起来看看接下来的内容,多态的原理~ 多态的原理,简单来说就是运行时到指向的对象的虚表中找到对应的虚函数的地址进行调用~ 有人可能就会好奇,虚表?什么是虚表?我们怎么知道虚表的存在呢?

    73500

    【Kotlin】Kotlin 类的继承 二 ( 属性覆盖 | 属性覆盖的四种情况 | 常量 变量 属性覆盖 | 子类初始化与属性覆盖 )

    子类初始化时考虑覆盖属性的使用 I . 属性覆盖基本方式 ---- 1 ....覆盖属性声明在子类主构造函数中 : 可以将子类中覆盖的父类属性声明在主构造函数中 , 如下示例 : open class Father { open var age : Int = 60 }...= 18 } ② 错误示例 ( 错误 ) : 3 ....子类初始化时考虑覆盖属性的使用 ---- 1 . 子类初始化 : 子类初始化时 , 要先将父类进行初始化 , 然后开始初始化子类 ; 2 ....初始化过程中的覆盖属性 : 这里加入对覆盖属性的考虑 , 父类初始化过程中 , 子类覆盖的属性还没有初始化 , 父类的 open 属性可能在子类初始化过程中被修改 ; 5 .

    2.3K20

    Java的继承与多态

    图1 图2 继承的特性: 子类拥有父类非private的属性,方法。 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。...二、调用父类构造方法 当子类实例化时,不仅需要初始化子类成员变量,也需要初始化父类成员变量,初始化父类成员变量需要调用父类构造方法,子类使用super关键字调用父类构造方法。...解决这个编译错误有三种办法: 在父类Person中添加默认构造方法,子类Student会隐式调用父类的默认构造方法。...编译器检查@Override注解的方法在父类中是否存在,如果不存在则报错。 注意:方法覆盖时应遵循的原则: 覆盖后的方法不能比原方法有更严格的访问控制(可以相同)。...输出结果如下: 工人人数:2,学生人数:3 4.4 引用类型转换:       引用类型可以进行转换,但并不是所有的引用类型都能互相转换,只有属于同一棵继承层次树中的引用类型才可以转换。

    1.2K60

    static静态变量在内存中的存储

    static的内部机制: 静态数据成员要在程序一开始运行时就必须存在。因为函数在程序运行中被 调用,所以静态数据成员不能在任何函数内分配空间和初始化。...静态数据成员要实际地分配空间,故不能在类的声明中定义(只能声明数据 成员)。类声明只声明一个类的“尺寸和规格”,并不进行实际的内存分配,所 以在类声 明中写成定义是错误的。...(5)static并没有增加程序的时空开销,相反她还缩短了子类对父类静态成 员的访问时间,节省了子类的内存空间。...(7)静态数据成员是静态存储的,所以必须对它进行初始化。...(8)静态成员初始化与一般数据成员初始化不同: 初始化在类体外进行,而前面不加static,以免与一般静态变量或对象相 混淆; 初始化时不加该成员的访问权限控制符private,

    2.7K20

    Stateful 组件的生命周期​

    生命周期二:initState initState 函数在组件被插入树中时被 Framework 调用(在 createState 之后),此函数只会被调用一次,子类通常会重写此方法,在其中进行初始化操作...另外在此函数中不能调用 BuildContext.dependOnInheritedWidgetOfExactType,典型的错误写法如下: @override void initState() {...生命周期四:build 此方法是我们最熟悉的,在方法中创建各种组件,绘制到屏幕上。Framework会在多种情况下调用此方法: 调用 initState 方法后。...子类重写此方法,释放相关资源,比如动画等。 非常重要的几个概念 下面介绍几个非常重要的概念和方法,这些并不是生命周期的一部分,但是生命周期过程中的产物,与生命周期关系非常紧密。...进行关联,当 Framework 调用 dispose 时,mounted 被设置为 false,表示当前组件已经不在树中。

    1.3K10

    Day8 面向对象编程:详解基于接口编程、组合优于继承、控制反转及SOLID五个原则

    如果一个类承担了多个职责,当其中一个职责发生变化时,可能会影响到其他职责的正常工作,从而增加了代码的复杂性和维护难度。...它的主要思想是软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。这意味着我们应该尽量在不修改现有代码的情况下,通过扩展来增加新的功能或修改现有功能。...如果我们直接修改 calculate_sum() 函数来处理三个参数,那么就违反了开闭原则,因为我们对现有的代码进行了修改。...这符合开闭原则,因为我们对代码进行了扩展,而没有关闭它的修改。...它的主要思想是在一个软件系统中,如果子类能够替换父类,并且不会导致系统出现异常或错误,那么这个子类就是符合里氏替换原则的。简单来说,就是子类应该能够在父类的位置上正常工作,而不会改变系统的行为。

    51410

    Flutter的生命周期

    生命周期二:initState 「initState」 函数在组件被插入树中时被 Framework 调用(在 「createState」 之后),此函数只会被调用一次,子类通常会重写此方法,在其中进行初始化操作...另外在此函数中不能调用 「BuildContext.dependOnInheritedWidgetOfExactType」,典型的错误写法如下: @override void initState() {...生命周期四:build 此方法是我们最熟悉的,在方法中创建各种组件,绘制到屏幕上。Framework会在多种情况下调用此方法: 调用 「initState」 方法后。...子类重写此方法,释放相关资源,比如动画等。 非常重要的几个概念 下面介绍几个非常重要的概念和方法,这些并不是生命周期的一部分,但是生命周期过程中的产物,与生命周期关系非常紧密。...「detached」:应用程序仍寄存在Flutter引擎上,但与平台 View 分离。

    2.1K30
    领券