精华内容
下载资源
问答
  • 共同属性被描述为类中的
    万次阅读 多人点赞
    2020-03-29 15:22:35

    Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。

    一、类、对象概述

    • 在面向对象程序设计中,把数据以及对数据的操作封装在一起,组成一个整体(对象),不同对象之间通过消息机制来通信或者同步。对于相同类型的对象进行分类、抽象后,得出共同的特征而形成了
    • 类的抽象具体包括两个方面:
      1.数据抽象:描述某类对象共有的属性或状态。
      2.过程抽象:描述某类对象共有的行为或功能操作。
    • 在python中,使用类来定义同一种类型的对象。类是广义的数据类型,能够定义复杂数据的特性,包括:
      1.静态特性(即数据抽象):创建类时用变量形式表示对象特征的成员称为属性(数据成员)
      2.动态特性(即行为抽象,也就是对数据的操作方法):用函数形式表示对象行为的成员称为成员方法,数据成员和成员方法统称为类的成员。
    • 类是实现代码复用和设计复用的一个重要方法,封装、继承、多态是面向对象程序设计的三个要素。
    • 类是生成对象的抽象模板,对象是根据类创建出来的一个个具体的实例。

    二、类的定义与使用

    • Python使用class关键字来定义类,class关键字之后是一个空格,接下来是类的名字,如果派生自其它基类的话则需要把所有父类放到一对圆括号中并使用逗号分隔,然后是一个冒号,最后换行并定义类的内部实现。
    • 类名的首字母一般要大写
    class Car(object):              #定义一个类,派生自object类(所有类的祖先,定义类时不存在其他父类就写object)
    	can_move=True               #定义类属性
        def infor(self):            #定义成员方法
            print("This is a car")
    
    • 类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self(self代表类的实例,而非类;self 不是 python 关键字,我们把他换成其他也是可以正常执行的)。

    三、类属性和类方法的调用

    定义了类之后,就可以用来实例化对象,并通过“对象名.成员”的方式来访问其中的数据成员或成员方法。

    >>>spring=Bird()                        #实例化对象
    >>>print(Bird.have_feather)             #通过类名调用属性
    >>>print(Bird.have_head)                #通过对象名调用属性
    >>>spring.move()                        #通过对象名调用方法
    >
    

    在这里插入图片描述
    在这里插入图片描述

    • 类方法大体分为 3 类,分别是类方法、实例方法和静态方法,其中实例方法用的是最多的。我们知道,实例方法的调用方式其实有 2种,既可以采用类对象调用,也可以直接通过类名调用。

    通常情况下,我们习惯使用类对象调用类中的实例方法。但如果想用类调用实例方法,不能像如下这样:

    class Study:
        def info(self):
            print("学 Python")
    #通过类名直接调用实例方法
    Study.info()
    

    运行上面代码,程序会报出如下错误:

    Traceback (most recent call last):
      File "D:\python3.6\demo.py", line 5, in <module>
        Study.info()
    TypeError: info() missing 1 required positional argument: 'self'
    

    其中,最后一行报错信息提示我们,调用 info() 类方式时缺少给 self 参数传参。这意味着,和使用类对象调用实例方法不同,通过类名直接调用实例方法时,Python 并不会自动给 self 参数传值。
    读者想想也应该明白,self 参数需要的是方法的实际调用者(是类对象),而这里只提供了类名,当然无法自动传值。

    因此,如果想通过类名直接调用实例方法,就必须手动为 self 参数传值。例如修改上面的代码为:

    class Study:
        def info(self):
            print("学 Python")
    clang = Study()
    #通过类名直接调用实例方法
    Study.info(clang)
    

    再次运行程序,结果为:

    学 Python
    

    可以看到,通过手动将 clang 这个类对象传给了 self 参数,使得程序得以正确执行。实际上,这里调用实例方法的形式完全是等价于 clang.info()。

    值得一提的是,上面的报错信息只是让我们手动为 self 参数传值,但并没有规定必须传一个该类的对象,其实完全可以任意传入一个参数,例如:

    class Study:
        def info(self):
            print(self,"学 Python")
    #通过类名直接调用实例方法
    Study.info("zhangsan")
    

    运行结果为:

    zhangsan 学 Python
    

    可以看到,“zhangsan” 这个字符串传给了 info() 方法的 self 参数。显然,无论是 info() 方法中使用 self 参数调用其它类方法,还是使用 self 参数定义新的实例变量,胡乱的给 self 参数传参都将会导致程序运行崩溃。

    总的来说,Python 中允许使用类名直接调用实例方法,但必须手动为该方法的第一个 self 参数传递参数,这种调用方法的方式被称为“非绑定方法”。
    用类的实例对象访问类成员的方式称为绑定方法,而用类名调用类成员的方式称为非绑定方法。
    (此处参考)

    四、私有成员与公有成员

    • 私有成员在类的外部不能直接访问,一般是在类的内部进行访问和操作,或者在类的外部通过调用对象的公有成员方法来访问,而公有成员是可以公开使用的,既可以在类的内部进行访问,也可以在外部程序中使用。
    • 从形式上看,在定义类的成员时,如果成员名以两个下划线开头但是不以两个下划线结束则表示是私有成员,否则就不是私有成员。
    • Python并没有对私有成员提供严格的访问保护机制,通过一种特殊方式“对象名._类名__xxx”也可以在外部程序中访问私有成员,但这会破坏类的封装性,不建议这样做。

    • 在Python中,以下划线开头的变量名和方法名有特殊的含义,尤其是在类的定义中。
    _xxx:受保护成员;
    __xxx__:系统定义的特殊成员;
    __xxx:私有成员,只有类对象自己能访问,子类对象不能直接访问到这个成员,但在对象外部可以通过“对象名._类名__xxx”这样的特殊方式来访问。
    
    • 注意:Python中不存在严格意义上的私有成员。
    更多相关内容
  • 【Qt】QWidget详解(属性篇)

    千次阅读 2021-03-29 16:26:20
    00. 目录 ... 函数和属性组08. Widget样式表09. 透明和双缓冲10. 创建半透明窗口11. Native Widgets和 Alien Widgets12. 成员类型文档13. 属性文档13.1 acceptDrops: bool13.2 accessibleDescription

    00. 目录

    文章目录

    01. 概述

    QWidget类是所有用户界面对象的基类。
    在这里插入图片描述

    属性
    在这里插入图片描述

    widget是用户界面最基本的组成部分:它接收来自于windows系统的鼠标、键盘以及其他事件,然后将它自己绘制在屏幕上。每一个widget都是矩形形状,以Z-order顺序排列。一个widget会被它的父窗口或者在它前面的widgets所截断。

    如果一个widget没有被嵌入到另外一个widget中,那么这个widget就叫做window,即一个独立的窗口。尽管我们可以通过设置window flags创建一个没有任何修饰的window,但是通常情况下,一个window都有一个边框和一些菜单栏等。在Qt中,QMainWindow以及QDialog的子类都是最为常见的window类型。

    一个widget的构造函数可以接受一个或者两个标准参数:

    (1) QWidget *parent = 0 ,为新创建的widget指定其父widget。如果parent为0(默认值),那么这个新widget就会变成一个独立的window。如果parent不为0,那么新创建的widget是parent的一个子窗口,但是此时我们新创建的widget的形状会受其父窗口形状的约束。(除非你指定这个新创建的widget的window flag为Qt::Window)

    (2) Qt::WindowFlags f = 0,这个参数用来设置新创建的widget的window flags(例如是否有最大化按钮等)。默认的参数几乎对所有的widget都是适用的。但是如果你需要一个没有边框的widget,你必须使用特定的flag。

    QWidget有很多成员函数,但是有一些成员函数并不会被使用。例如,QWidget有font(字体)属性,但是基本上不会调用这个函数。

    02. 顶层widget和子widget

    一个没有父widget的widget是一个独立的window,即是一个顶层widget。对于这些widget,setWindowTitle()函数和setWindowIcon()分别设置窗口的标题和图标。

    非window类型的widget是子widget,在父widget中显示。Qt中的大多数widget主要是作为子widget。例如,我们可以把一个按钮作为一个顶层窗口,但是大多数人倾向于把他们的按钮放在widget里面,例如把按钮放在QDialog(对话框类)中。
    在这里插入图片描述

    上图中展示了把一个QGroupBox作为widget来容纳QGridLayout中的各种各样的子widget。QLabel被设置为自适应大小

    如果你想用一个QWidget来容纳子widget,通常情况下你应该给父QWidget添加一个layout(布局)。更多信息参见Layout Management

    03. 复合型Widget

    如果要把一个widget作为一个容器来存放一组子widget,这个widget就称之为复合型widget。可以通过构造一个带有可视属性的widget-一个QFrame来实现。例如,通常我们通过该widget的layout(布局)来添加一个子widget。上图中的widget便是通过Qt Designer创建的。

    复合型的widget也可以是标准widget的一个子类,例如QWidget或者QFrame,然后在这个子类中添加必要的layout(布局)和子widget。Qt中的许多例子以及教程中的例子中的复合型widget都是使用该方法创建的。

    04. 自定义控件和绘制方式

    因为QWidget是QPaintDevice的一个子类,因此QWidget可以通过实例化一个QPainter的对象,然后使用一系列的绘制方式来显示自定义的内容。该方法与Graphics View Framework(我猜指的是通过拖拽控件来制作一个特定窗口的方法)的canvas-style approach(画布风格方法)完全不同。在Graphics View Framework中,每一个被应用程序添加的控件都由framework自身来渲染。

    每一个widget的绘制操作都由自己的paintEvent()来执行。无论何时,只要有一些变化发生或者是应程序的要求而导致这个widget需要被重新绘制时,就会调用这个函数。

    这个模拟时钟的例子展示了一个简单的窗口是如何处理绘制事件的。

    05. Size Hints和Size Policies

    当实例化了一个新的widget的时候,重载SizeHint()函数使得窗口有一个合理的默认大小,重载setSizePolicy()使得该窗口有正确的大小策略,这两个方法都是非常有用的。

    默认情况下,不提供大小提示的复合窗口小部件将根据其子窗口小部件的空间要求来调整大小。

    size policy使得layout management system(布局管理系统)拥有良好的默认大小变化管理依据。这使得其他的widget更加容易管理和容纳你的widget。默认的size policy表示widget的大小可以自由变化,一般倾向于采用sizeHint()返回的大小,这对大多数的widget来说已经足够好了。

    提示:

    顶层widget的大小一般约束为桌面大小长度和宽度的的2/3,但我们也可以通过resize()函数来手动改变大小。

    06. 事件(Events)

    用户的行为引起了widget对事件的响应。Qt通过实例化QEvent的子类的一个对象,该对象包括每个事件的相关信息,然后通过调用对应的事件处理函数将事件传送给widget。

    如果你的widget中只有些许widget,你很有可能不需要实现事件处理函数。如果你想在一个子widget中捕捉鼠标点击事件,只需要在这个子widget中的mousePressEvent()中调用underMouse()函数即可。

    Scribble Example实现了更多的有关于鼠标移动、按钮点击和窗口重设大小的事件处理过程。

    你需要给自己的widget添加一些行为和内容,如下是一些简单的和QWidget有关的事件概览,我们从最常见的说起:

    • paintEvent(),只要widget需要重新绘制就会被调用。每一个自定义的widget都需要实现这个函数。使用QPainter进行绘制只能发生在一个PaintEvent()中,或者是以paintEvent()的形式调用它。

    • resizeEvent(),当widget大小被重新设置的时候就会被调用

    • mousePressEvent()当按下一个鼠标按钮时鼠标光标是widget内部时,或当使用窗口小部件已经抓住了鼠标被称为grabMouse()。在不释放鼠标的情况下按下鼠标,实际上与调用grabMouse()相同。

    • mouseReleaseEvent(),将调用mouseReleaseEvent()。当窗口小部件收到相应的鼠标按下事件时,它将接收鼠标释放事件。这意味着,如果用户按下里面的鼠标你的小部件,然后松开鼠标按钮之前拖动鼠标别的地方,你的小部件接收的释放事件。有一个例外:如果在按住鼠标按钮的同时出现弹出菜单,则该弹出窗口会立即窃取鼠标事件。

    • mouseDoubleClickEvent() ,当用户在widget中双击鼠标就会被调用。如果用户双击,widget会收到一个mouse press 事件,一个 mouse release 事件,(一个mouse click 事件)和另外一个mouse press 事件,一个 mouseDoubleclick 事件,和一个mouse release 事件。如果在双击过程中发生了鼠标抖动,就会收到一个mouse move 事件。在没有收到第二次点击鼠标的事件前是不可能区分鼠标单击事件和鼠标双击事件的。(这就是为什么大多数GUI书推荐把双击事件作为单击事件的一个扩展而不是定义为另外一个不同的操作)

    如果widget接受键盘输入,则需要实现一些其它的事件处理函数:

    • keyPressEvent(),用户按下一个键时就会被调用,如果长按一个键,这个函数会被重复调用。如果焦点变化机制没有使用Tab和Shift+Tab键,那么这两个键仅仅会传递给Widget。如果要强行使你的widget处理这两个键的信息,则需要实现QWidget::event()。

    • focusInEvent() ,如果widget获得键盘焦点,该函数就会被调用。(假定你提前调用了setFocusPolicy()函数),功能良好的widget意味着它们会以明确的方式获得焦点。

    • focusOutEvent() ,widget失去焦点时该函数就会被调用。

    也许你还需要实现一些不太常见的事件处理函数:

    • mouseMoveEvent(),当你按下鼠标,并且移动的时候该函数会被调用。在拖拽操作中这个函数非常有用。如果你调用了setMouseTracking(true),那么即使鼠标没有被按下,但是只要鼠标在移动,这个函数就会被调用。(见 Drag and Drop板块)

    • keyReleaseEvent(),一个按键被松开时,或者持续按住一个键(这个键必须是自动重复的)时该函数就会被调用。如果是第二种情况,那么widget会在按键每次重复时收到一对key release和key press事件。如果焦点变化机制没有使用Tab和Shift+Tab键,那么这两个键仅仅会传递给Widget。如果要强行使你的widget处理这两个键的信息,则需要实现QWidget::event()。

    • wheelEvent(),鼠标滑轮滚动时该函数被调用

    • enterEvent(),鼠标进入该widget所在屏幕区域时被调用(该widget的屏幕区域不包括其子widget的屏幕区域)

    • leaveEvent(),鼠标离开widget所在屏幕区域时被调用,但是如果鼠标进入了子widget屏幕区域时该函数不会被调用

    • moveEvent(),widget相对于其父widget被移动时调用该函数

    • closeEvent(),用户关闭widget时或者调用close()函数时该函数被调用

    还有一些鲜为人知的事件,详见QEvent::Type,如果要处理这些事件,你还需要亲自实现event

    默认的event会处理Tab和Shift+Tab键(用来改变键盘焦点),同时也会传递上述的一个或者多个事件。

    事件及其传递机制在事件系统中介绍

    07. 函数和属性组

    在这里插入图片描述

    08. Widget样式表

    除了在每一个平台上标准的widget风格外,widget也可以style sheet(样式表)指定的风格。这个特性使得我们可以依照用户的目的将widget改造为特定的样式。例如,可以把一个按钮设置为一种特定的样式来表明它的销毁行为。

    widget风格样式表的更多内容详见Qt Style Sheets 文档

    09. 透明和双缓冲

    自从Qt4.0开始,QWidget在绘制过程中自带双缓冲机制,因此不需要再paintEvent()中额外编写双缓冲的代码来避免闪烁问题。
    自从Qt4.1开始, 只要没有设置 Qt::WA_PaintOnScreen,parent widgets(父窗口)的内容会默认传递给它的子窗口。可以利用这个特点来编写一个自定义的窗口,该窗口拥有不规则的区域(创建非矩形形状的子窗口),或者用小于全alpha组件的颜色进行绘制(原文:or painting with colors that have less than full alpha component)。下图展示了通过调整自定义widget的属性和性能来达到不同的效果。
    在这里插入图片描述

    上图中,构造了一个被挖去中间部分只留下边框的半透明矩形子窗口,然后将其添加到一个父窗口中(该父窗口其实是一个显示pixmap的QLabel), 然后我们设置了不同的属性和性能达到了不同的效果:

    • 左边的widget没有额外的性能设置,也没有进行属性设置。这个默认的状态适合大多数自定义的使用透明属性的widget,是不规则的形状,同时没有用不透明的刷子来绘制它们的全部区域。

    • 中间的widget设置了 autoFillBackground 属性,这个属性适用于那些父窗口已经提供了默认的背景的自定义子窗口。此时,也不会用不透明的刷子来绘制他们的全部区域。

    • 右边的widget设置了Qt::WA_OpaquePaintEvent,该属性表明这个widget将会用不透明的颜色来绘制它的全部区域。widget的区域初始状态是未初始化的,在右边的图中表现为红色的对角线方格模型穿过被绘制过的区域,Qt::WA_OpaquePaintArea属性对于需要快速绘制特定内容而不需要默认填充背景的widget非常有用。

    要想快速的更新拥有简单背景色的widget,例如实时绘图或者是图形widget,最好定义一个合适的背景色(采用 QPalette::Window 来设置setBackgroundRole() ),然后设置autoFillBackground属性,然后在paintEvent()中实现必要的绘制功能。

    要想快速更新含有非透明内容的widget,例如视频流widget,最好设置 Qt::WA_OpaquePaintEvent,避免任何不必要的背景绘制。

    如果一个widget同时拥有 Qt::WA_OpaquePaintEvent 的属性和autoFillBackground属性,那么Qt::WA_OpaquePaintEvent属性拥有优先权。视你的需求而定,你应该从其中挑选一个。

    自Qt4.1以来,父窗口的内容也会传标准的子窗口。如果一个父widget并没有以标准窗口的修饰方法进行修饰,就会导致一些预料不到的结果,例如下图所示:
    在这里插入图片描述

    一个标准Qt widget的自定义的绘制范围,不依赖于其子类,会略低于自定义widget的绘制范围。通常,我们期望的标准widget的外观可以通过设置autoFillBackground来实现。

    10. 创建半透明窗口

    从Qt 4.5开始,可以在支持合成的窗口系统上创建具有半透明区域的窗口。

    在一个顶层窗口中实现启用这个特性,用setAttribute来设置Qt::WA_TranslucentBackground,同时还要保证你想获得的透明区域使用透明颜色绘制。

    平台相关性:

    • X11:此功能依赖于使用支持ARGB视觉效果的X服务器和合成窗口管理器。
    • Windows:窗口小部件需要设置Qt :: FramelessWindowHint窗口标志,以使半透明起作用。

    11. Native Widgets和 Alien Widgets

    Alien widgets从Qt4.4引入,指的是不在窗口系统中的widget,它们并不拥有本地窗口句柄;这一特性显著的加速了widget绘制、重新定制大小以及去除闪烁。

    如果你需要使得Native Widgets拥有以前的属性,你需要选择以下属性之一:

    1.在开发环境中指定QT_USE_NATIVE_WINDOWS=1

    2.在你的应用程序中设置 Qt::AA_NativeWindows 属性。所有的widget都会成为Native widgets

    3.在widgets上设置Qt::WA_NativeWindow属性。这个widge本身以及其祖先都会成为Native Widget(除非设置了Qt::WA_DontCreateNativeAncestors )

    4.调用QWidget::winld强制变成一个native window(同第3个选项)

    5.设置Qt::WA_PaintOnScreen属性强制变为一个native window(同3选项)

    12. 成员类型文档

    enum QWidget::RenderFlag

    flags QWidget::RenderFlags

    这个枚举类型描述了调用QWidget::render()函数时如何渲染widget
    在这里插入图片描述

    13. 属性文档

    13.1 acceptDrops: bool

    该属性表示该widget的拖放属性事件是否开启。

    设置该属性为true即告诉系统该窗口可能接受拖放事件

    如果该widget是桌面(windowType()==Qt::Desktop),如果另外一个应用程序正在使用桌面,该属性可能失效。你可以调用acceptDrops()来测试是否会出现这种情况。

    警告:不要在一个拖和放(drag and drop)的事件处理函数中修改这个属性

    默认该属性为false

    相关函数

     bool acceptDrops() const
     void setAcceptDrops(bool on)
    

    13.2 accessibleDescription : QString

    该属性控制widget的描述是否可以通过辅助技术可见

    可访问性描述应该传达这个widget的功能信息。accessibleName应该是简单明了的字符串(例如 保存),而描述性信息应该给出更多的内容,例如 保存当前文档。

    这个属性应该被localized,(区域化

    默认情况下,该属性包括一个空字符串,此时Qt选择用工具提示来提供这些信息

    相关函数

     QString accessibleDescription() const
     void setAccessibleDescription(const QString &description)
    

    13.3 accessibleName : QString

    该属性控制widget的名称是否可以通过辅助技术可见

    这是诸如屏幕阅读器之类的辅助技术宣布此小部件的主要名称。对于大多数窗口小部件,不需要设置此属性。例如,对于QPushButton,将使用按钮的文本。

    当窗口小部件不提供任何文本时,设置此属性很重要。例如,仅包含图标的按钮需要设置此属性才能与屏幕阅读器一起使用。该名称应简短,并且与小部件传达的视觉信息等效。

    此属性必须本地化。

    默认情况下,此属性包含一个空字符串。

    相关函数

     QString accessibleName() const
     void setAccessibleName(const QString &name)
    

    13.4 autoFillBackground : bool

    该属性控制widget是否自动填充背景

    如果启用该属性,则会导致Qt在调用绘制事件之前会填充widget背景。而自动填充所用的颜色是来自于widget的palette中的QPalette::Window

    除此之外,窗口(这里特指Windows,而不是widget)经常会用QPalette::Window 填充。除非设置了WA_OpaquePaintEvent 或者 WA_NoSystemBackground 属性

    如果其父窗口有对背景设置了static gradient,named该属性不能被禁用(即传入参数为false)

    警告:当与Qt样式表 一起使用的时候需要注意,当一个widget有一个拥有有效的背景图的样式表Qt Style Sheet或者一个border-image时,这个属性会被自动禁用。

    默认情况下该属性是false

    相关函数

     bool autoFillBackground() const
     void setAutoFillBackground(bool enabled)
    

    13.5 baseSize : QSize

    该属性控制widget的基本大小

    如果widget定义了sizeIncrement(),base size就会计算一个合适的大小。

    默认情况下,对于一个新创建的widget,这个属性包含一个宽度和高度都为0的尺寸

    相关函数

     QSize baseSize() const
     void setBaseSize(const QSize &)
     void setBaseSize(int basew, int baseh)
    

    13.6 childrenRect : const QRect

    该属性获取widget的子窗口的矩形边界

    隐藏的子窗口除外(即不能控制)

    默认情况下,一个没有子窗口的widget,该属性包括一个长度和宽度都为0,位置在原点的矩形。

    相关函数

     QRect childrenRect() const
    

    13.7 childrenRegion : const QRegion

    该属性获取被widget的子窗口门占据的所有区域

    隐藏的子窗口除外

    默认情况下,一个没有子窗口的widget,这个属性会返回一个空region

    相关函数

     QRegion childrenRegion() const
    

    13.8 contextMenuPolicy : Qt::ContextMenuPolicy

    该属性控制widget显示一个上下文菜单的方式。

    该属性默认值为 Qt::DefaultContextMenu,也就是说默认调用contextMenuEvent()函数。其他可选值有: Qt::NoContextMenu, Qt::PreventContextMenu, Qt::ActionsContextMenu, 以及 Qt::CustomContextMenu。如果设置了Qt::CustomContextMenu,那么 signal(信号)customContextMenuRequested()会被传递给窗口

    相关函数

     Qt::ContextMenuPolicy contextMenuPolicy() const
     void setContextMenuPolicy(Qt::ContextMenuPolicy policy)
    

    13.9 cursor : QCursor

    该属性控制widget中鼠标的形状

    当鼠标在该widget区域内时就会改变为设置的形状。鼠标的形状可以参见预定义鼠标对象列表

    一个编辑器可能会采用一个I-beam形状,例如:

    setCursor(Qt::IBeamCursor);

    如果并没有设置光标样式,或者调用了unsetCursor()函数之后,会采用其父窗口的光标样式。

    默认情况下,该属性包含一个我们常见的箭头样式的光标- Qt::ArrowCursor

    即使是在按下鼠标后离开widget的区域之后,一些底层窗口会重新设置光标样式,如果你想为所有的widget,即使是在窗口范围外也要设置一个光标样式的话,可以考虑一下QApplication::setOverrideCursor()

    相关函数

     QCursor cursor() const
     void setCursor(const QCursor &)
     void unsetCursor()
    

    13.10 enabled : bool

    该属性控制widget是否启用(处于enabled状态)

    默认情况下一个enabled的widget会处理键盘和鼠标事件。一个disabled widget却不会处理。但是QAbstractButton却是个例外。

    有些widget在disabeld情况下会有不同的表现状态。例如一个按钮会将其置灰。如果你的widget需要知道什么时候widget处于enabled或者disabled状态,可以使用QEvent::EvabledChange类型的changeEvent()

    默认情况下,该属性为true

    相关函数

     bool isEnabled() const
     void setEnabled(bool)
    

    13.11 focus : const bool

    该属性控制widget是否处于键盘输入的焦点

    默认情况下,该属性为false

    Note:获取该属性的值等同于调用 QApplication::focusWidget()来检查程序焦点是否是这个widget

    相关函数

     bool hasFocus() const
    

    13.12 focusPolicy : Qt::FocusPolicy

    该属性控制widget获取键盘焦点的方式:

    1. 如果widget接受Tab键来获取键盘焦点,则为 Qt::TabFocus方式

    2. 如果接受点击来获取焦点,则为 Qt::ClickFocus方式

    3. 如果以上两种方式都接受,则为 Qt::StrongFocus方式

    4. 如果不接受任何焦点,则为 Qt::NoFocus方式

    如果一个widget要处理键盘事件,named你必须启用其键盘焦点。这项工作通常在widget的构造函数中完成。例如,QLineEdit函数就会在其构造函数中调用setFocusPolicy(Qt::StrongFocus).

    如果该widget有个焦点代理,那么其获取焦点的方式也会传递给代理。

    相关函数

     Qt::FocusPolicy focusPolicy() const
     void setFocusPolicy(Qt::FocusPolicy policy)
    

    13.13 font : QFont

    该属性控制widget的当前字体

    该属性描述了widget所需要的字体,即当渲染标准的组件时会采用当前字体。同时这也是使得自定义的widget与所属的平台的外观风格保持一致性的一种方式。一般地,不同的平台或者不同的风格都会对应用程序定义不同的字体。

    当我们给widget赋予一个新的字体时,新字体就会和widget默认的字体共同组成了widget最后的字体(我们称之为 final font)。可以调用fianlFont()函数获取widget final font 的信息。final font 也会被用来初始化QPainter的字体。

    QWidget类中父类会显式(explicit和implict对应)的将其字体传递给子widget。如果你对一个字体做了特殊的改变并且将其赋值给一个widget,那么这个字体会传递给其所有子widget。但是默认的字体不会传递给window(参见 isWindow()函数)除非我们启用了Qt::WA_WindowPropagation属性

    QWidget的字体传播方式和其调色板(palette)的字体传播方式相同

    当前Qt中渲染标准qt widget的风格,可以任意的的选用widget中的字体,或者在某些情况下忽略这些字体(部分忽略或者全部忽略)。尤其是,GTK 风格,Windows 风格,Mac 风格,Windows XP 和Windows Vista 风格,对widget的字体做出一些特殊的改变来匹配平台的外观风格。正因为如此,对一个widget赋予一个新的字体并不能保证能够使得widget发生改变。相反的,你可以选择应用一个styleSheet。

    Note:如果同时对一个widget使用了setFont()函数和Qt Style Sheets而发生风格上的冲突,那么style sheets会拥有更高的优先级。

    相关函数

     const QFont &font() const
     void setFont(const QFont &)
    

    13.14 frameGeometry : const QRect

    该属性控制widget相对于其父窗口的几何结构, 包括窗口边框(window frame)

    窗口形状问题详见我的另一篇文章Qt 中的窗口和对话框组件

    默认情况下,该属性包含一个依赖于平台和屏幕几何结构的值

    相关函数

     QRect frameGeometry() const
    

    13.15 frameSize : const QSize

    该属性控制widget,包括窗口边框在内的大小

    默认下,该属性包含一个依赖于用户的平台及屏幕结构的值

    相关函数

     QSize frameSize() const
    

    13.16 fullScreen : const bool

    该属性控制widget是否以全屏模式显示

    一个全屏模式显示的widget会占据全部的屏幕区域,并且不会显示其它诸如标题栏之类的玩意儿。

    默认情况,该属性为false

    相关函数

     bool isFullScreen() const
    

    13.17 geometry : QRect

    该属性控制widget相对于其父窗口的几何结构,但不包括窗口边框,注意和frameGeometry区别。

    当改变几何结构时,widget,如果可见的话,会立即收到一个移动事件(moveEnvent())以及/或者 一个重新绘制大小的事件(resizeEvent())如果widget当前状态下不可见,那么在它显示之前会收到合适的事件。

    当窗口的大小被设置的超出了 minimumSize()和 maximumSize()设置的范围时,其大小会自动变化以适应

    警告: 在resizeEvent()函数或者moveEvent()中调用 setGeometry()函数会导致无限迭代

    窗口形状问题详见我的另一篇文章Qt 中的窗口和对话框组件

    默认下,该属性包含一个依赖于用户的平台及屏幕结构的值

    相关函数

     const QRect &geometry() const
     void setGeometry(int x, int y, int w, int h)
     void setGeometry(const QRect &)
    

    13.18 height : const int

    该属性控制widget除去窗口边框的客户区的高度

    有关Windows几何问题的概述,请参见“窗口几何”文档。

    注意:请勿使用此功能在多屏幕桌面上查找屏幕的高度。请阅读此说明以获取详细信息。

    默认情况下,该属性包含一个依赖于用户平台和屏幕结构的值

    相关函数

     int height() const
    

    13.19 inputMethodHints : Qt::InputMethodHints

    该属性控制widget拥有怎样的输入提示

    这只和输入类型的widget有关。该属性被输入方法用检索从而确定具体的输入方法的操作方式。例如,如果设置了Qt::ImhFormattedNumbersOnly,那么输入方法会改变其可见的组件来告知用户只能输入数字。

    警告:一些widget需要确定的标志来完成其任务。要设置flag(标志),使用w->setInputMethodHints(w->inputMethodHints()|f)来代替w->setInputMethodHints(f)

    注:flags仅仅起到提示的作用,所以特定的输入方法可以忽略这些提示。如果你想让用户输入一些特定的字符,你应该对widget设置QValidator。

    默认的属性值为Qt::ImhNone

    该属性于Qt4.6中引入

    相关函数

     Qt::InputMethodHints inputMethodHints() const
     void setInputMethodHints(Qt::InputMethodHints hints)
    

    13.20 isActiveWindow : const bool

    该属性获取当前widget的窗口是否为活动的窗口

    活动窗口即该窗口下的widget拥有键盘输入焦点(一个窗口如果没有widget或者它的widget都不接受键盘输入,它仍然可以拥有焦点)

    当一个弹出窗口可见时,该属性对于弹出窗口和当前活动窗口都为true

    默认情况下,该属性为false

    相关函数

     bool isActiveWindow() const
    

    13.21 layoutDirection : Qt::LayoutDirection

    该属性控制widget的布局方向

    默认情况下,该属性设置为 Qt::LeftToRight

    当一个widget的布局方向已经被设置时,该属性会被传递给其子widget,但是不会传递给一个显式的调用了setLayoutDirection()的子widget。同样的,在给父widget设置了布局方向后,给其添加子widget时,子widget也不会继承其布局方向。

    :从Qt4.7以后该属性不再影响文本的布局方向

    相关函数

     Qt::LayoutDirection layoutDirection() const
     void setLayoutDirection(Qt::LayoutDirection direction)
     void unsetLayoutDirection()
    

    13.22 locale : QLocale

    该属性控制widget 的语言环境

    只要没有设置特定的locale,那么该widget的local属性要么是其父widget的属性,要么是默认的属性(该widget是一个顶级窗口)

    如果该widget会显示时间和日期,那么由于不同区域有不同表示方式,这些属性应该由widget的locale进行格式化

    该属性在Qt4.3中引入。

    相关函数

     QLocale locale() const
     void setLocale(const QLocale &locale)
     void unsetLocale()
    

    13.23 maximized : const bool

    该属性获取widget是否最大化

    该属性仅仅对window有意义,对子窗口无意义

    注:由于一些窗口系统限制,并非每次调用都会返回预期的结果。(例如在window系统中,用户通过window系统的窗口管理机制将窗口最大化,Qt则无法将最大化和其他大小区别开来)。但这个问题会随着window管理协议的发展而得到改进。

    默认情况下,该属性为false

    相关函数

     bool isMaximized() const
    

    13.24 maximumHeight : int

    此属性获取widget的最大高度(以像素为单位)

    此属性对应于maximumSize属性所保持的高度。

    默认情况下,此属性包含值16777215。

    注意:QWIDGETSIZE_MAX宏的定义限制了小部件的最大大小。

    相关函数

     int maximumHeight() const
     void setMaximumHeight(int maxh)
    

    13.25 maximumSize : QSize

    该属性控制widget的最大像素尺寸

    一个widget的最大尺寸不能超过其最大尺寸

    默认情况下,一个widget的最大尺寸,高度和宽度都为16777215

    :由于QWIDGETSIZE_MAX的原因,会限制widget的最大尺寸

    相关函数

     QSize maximumSize() const
     void setMaximumSize(const QSize &)
     void setMaximumSize(int maxw, int maxh)
    

    13.26 maximumWidth : int

    该属性控制widget的最大像素宽度

    该属性对应于maximumSize对应的最大宽度

    默认请款下,该属性值为16777215

    :由于QWIDGETSIZE_MAX的原因,会限制widget的最大尺寸

    相关函数

     int maximumWidth() const
     void setMaximumWidth(int maxw)
    

    13.27 minimized : const bool

    该属性返回widget是否窗口最小化

    该属性只对window有意义,对于子窗口无意义

    默认情况下,该属性为false

    相关函数

     bool isMinimized() const
    

    13.28 minimumHeight : int

    该属性控制widget的最小像素高度

    该属性受到minimumSize属性中高度的限制

    默认情况下,该属性值为0

    相关函数

     int minimumHeight() const
     void setMinimumHeight(int minh)
    

    13.29 minimumSize : QSize

    该属性控制widget的最小尺寸

    widget不能被调整为一个小于最小尺寸的widget。如果当前size比最小尺寸更小,widget会被强制转化为最小的尺寸

    该函数设置的最小尺寸会覆盖QLayout中定义的最小大小。如果不想设置最小大小,可以使用QSize(0,0)

    默认情况下,这个属性中高度和宽度都为0

    相关函数

     QSize minimumSize() const
     void setMinimumSize(const QSize &)
     void setMinimumSize(int minw, int minh)
    

    13.30 minimumSizeHint : const QSize

    该属性控制widget的推荐的最小尺寸

    如果该属性是一个无效值,那么不会进行最小尺寸推荐

    默认情况下,如果该widget没有一个布局,那么推荐的最小尺寸函数会返回一个无效值。否则会返回widget的布局的最小大小。大多数内嵌的widget都会重载minimumSizeHint()函数

    QLayout永远不会把一个widget的尺寸设置的比推荐尺寸更小。除非设置了minimumSize()或者其尺寸控制模式被设置为QSizePolicy::Ignore。如果设置了minimumSize(),那么推荐的最小尺寸函数就会被忽略。

    相关函数

     virtual QSize minimumSizeHint() const
    

    13.31 minimumWidth : int

    该属性控制widget的最小像素宽度

    该属性对应于minimumSize对应的最小宽度

    默认情况下,该属性为0

    相关函数

     int minimumWidth() const
     void setMinimumWidth(int minw)
    

    13.32 modal : const bool

    该属性控制widget是否是一个模态的widget

    该属性只对window有意义,一个模态窗口阻断其他任何窗口获取输入信息

    默认情况下,该属性为false

    相关函数

     bool isModal() const
    

    13.33 mouseTracking : bool

    该属性控制鼠标跟踪是否在该widget中启用

    如果鼠标跟踪处于禁用状态(默认状态),那么至少在鼠标移动过程中按下一个鼠标按钮,widget才会收到mouse move(鼠标移动)事件

    如果启用了鼠标跟踪属性,那么只要鼠标在widget中移动,widget就会收到mouse move鼠标移动事件

    相关函数

     bool hasMouseTracking() const
     void setMouseTracking(bool enable)
    

    13.34 normalGeometry : const QRect

    该属性返回widget作为顶级窗口正常显示情况下的矩形尺寸。(非最大化或者全屏状态)

    对于子窗口来说,该属性返回一个空的矩形

    默认情况下,该属性包含一个空的矩形

    相关函数

     QRect normalGeometry() const
    

    13.35 palette : QPalette

    该属性控制widget的调色板

    该属性描述了widget的调色板。widget的风格会在渲染标准组件时使用调色板,它也是一种保证自定义的widget与本地平台在外观和风格上保持一致的一种有效方法。一般地,不同的平台,不同的风格,都有着不同的调色板。

    当给widget指定一个新的调色板的时候,widget默认的调色板会和新的调色板组合起来构成了widget最终的调色板。来自于调色板的背景色会填充widget的背景,同时,调色板中的前景色会初始化QPainter的画笔.

    默认的调色板依赖于系统环境。QApplication会为所有的widget维护一个系统默认或者当前风格的调色板。对于特定的widget,可能有特定的特殊的调色板。(例如,在Windows XP和Vista系统中,所有来自于QMenuBar的类都有特定的默认调色板)。也可以通过把自定义的调色板和对应的widget传递给QApplication::setPalette()函数来给widget设定特定的调色板。最后,调色板还有一个可选功能,即对赋予的颜色进行polishing(润色)(见QStyle::polish())

    QWidget会显式的将调色板成员传递给其子widget。如果你将一个brush或者一个color传递给调色板,然后将该调色板赋值给widget,那么该调色板会被传递给该widget的所有子widget,从而覆盖系统默认的调色板。需要注意的是,默认的调色板并不会传递给窗口,除非我们启用了Qt::WA_WindowPropagation属性

    QWidget的调色板传递和其字体的传递方式相似

    当前渲染标准的Qt widget的风格,可以自由地从widget的调色板中选择颜色和画刷,抑或是忽略调色板(部分忽略或者全部忽略)。尤其是GTk、Mac、WIndows XP 和 Vista风格下,这些依赖于第三方API来渲染组件的风格并不会遵从调色板。正因为如此,给一个widget赋予一个新的调色板并不能保证能够改变widget的外观。因此,你或许会选择styleSheet取而代之。更多内容,见这里

    警告:不要把该函数和Qt Style Sheets一起结合使用。当使用style sheets时,widget的调色板可以使用”color”,”background-color”,”selection-color”,”selection-background-color”,”alternate-background-color”来自定义

    相关函数

     const QPalette &palette() const
     void setPalette(const QPalette &)
    

    13.36 pos : QPoint

    该属性控制widget相对于其父widget的位置

    如果该widget是一个window,那么pos会返回widget在桌面上的位置,包括其边框

    当改变一个widget的位置时,这个widget,如果可见的话,会立即收到一个移动事件(moveEvent())。如果该widget当前处于不可见状态,那么在该widget显示之前也会收到移动事件。

    默认情况下,该属性包括一个位置,指向其初始位置

    警告:在setGeometry()和moveEvent()中调用move()函数会导致无限迭代。

    窗口形状问题详见我的另一篇文章Qt 中的窗口和对话框组件

    相关函数

     QPoint pos() const
     void move(int x, int y)
     void move(const QPoint &)
    

    13.37 rect : const QRect

    该属性控制widget除去窗口边框的内在几何矩形

    该属性等同于QRect(0,0,width(),height())

    默认情况下,该属性依赖于用户平台及其屏幕结构

    相关函数

     QRect rect() const
    

    13.38 size : QSize

    该属性控制widget除去边框之外的大小

    如果该widget可见,并且被重新调整了大小,则会立即收到一个调整大小事件(resizeEvent()),如果widget在当前状态下不可见,那么则会在其显示之前收到该事件

    如果widget超出了minimumSize()和maxmumSize()定义的范围,则会自适应大小

    默认情况下,该属性包含一个依赖于用户平台和屏幕结构的值

    警告:在SetGeometry()和resizeEvent()中调用resize()会导致无限迭代
    **注意:**将大小设置为QSize(0, 0)将会导致窗口小部件不出现在屏幕上。这也适用于Windows。

    相关函数

     QSize size() const
     void resize(int w, int h)
     void resize(const QSize &)
    

    13.39 sizeHint : const QSize

    该属性中包含widget的推荐尺寸

    如果该属性值是一个无效值,那么不会推荐尺寸

    如果widget没有一个布局,那么默认的sizeHint()函数会返回一个无效值。如果有布局,那么会返回布局中的合适大小

    相关函数

     virtual QSize sizeHint() const
    

    :你可以对所有的widget定义sizeIncrement尺寸,但是这仅仅对window有意义(对widget不管用)

    默认情况下,这个属性中高度和宽度都为0

    警告:该属性在Windows 系统下可能无效,还可能会被Windows系统下的窗口管理系统给忽略。

    13.40 sizeIncrement : QSize

    该属性控制widget的尺寸增量步幅(每次宽度,长度增加的量)

    当我们对window调整其大小时,宽度将会以sizeIncrement()函数中定义的sizeIncrement().width(),高度将会以sizeIncrement().height()定义的高度进行增长。而增长中基本大小尺寸是baseSize()函数的返回值。优先的尺寸是非负整数i和j的组合:

     width = baseSize().width() + i * sizeIncrement().width();
     height = baseSize().height() + j * sizeIncrement().height();
    

    相关函数

     QSize sizeIncrement() const
     void setSizeIncrement(const QSize &)
     void setSizeIncrement(int w, int h)
    

    13.41 sizePolicy : QSizePolicy

    该属性控制widget的默认布局方式

    如果有一个QLayout管理widget的子widget,则会调用该QLayout制定的布局方式,如果没有QLayout,那么会调用该函数的返回结果

    默认策略是Preferred / Preferred,这意味着可以自由调整窗口小部件的大小,但更喜欢使用sizeHint()返回的大小。类似于按钮的小部件将大小策略设置为指定它们可以水平拉伸但垂直固定。这同样适用于lineedit控件(例如QLineEdit,QSpinBox或可编辑的QComboBox)和其他水平定向的小部件(例如QProgressBar)。QToolButton通常是正方形的,因此它们允许双向增长。支持不同方向的小部件(例如QSlider,QScrollBar或QHeader)指定仅在相应方向上拉伸。可以提供滚动条的小部件(通常是QScrollArea的子类)往往会指定它们可以使用额外的空间,并且可以用不到sizeHint()的大小来实现。

    相关函数

     QSizePolicy sizePolicy() const
     void setSizePolicy(QSizePolicy)
     void setSizePolicy(QSizePolicy::Policy horizontal, QSizePolicy::Policy vertical)
    

    13.42 statusTip : QString

    该属性控制widget的状态提示信息

    默认情况下,该属性包含一个空字符串

    相关函数

     QString statusTip() const
     void setStatusTip(const QString &)
    

    13.43 styleSheet : QString

    该属性控制widget的风格样式表

    该属性包含自定义的widget的文本描述信息。在Qt Style Sheets中有详细描述

    警告:Qt 风格样式表目前对于自定义QStyle并不支持,以后会解决该问题。

    相关函数

     QString styleSheet() const
     void setStyleSheet(const QString &styleSheet)
    

    13.44 tabletTracking : bool

    此属性保存是否为小部件启用数位板跟踪

    如果禁用了数位板跟踪(默认设置),则在移动笔时,小部件仅在手写笔与数位板接触或至少按下一个手写笔按钮时接收数位板移动事件。

    如果启用了数位板跟踪,则即使将鼠标悬停在附近,小部件也将接收数位板移动事件。这对于监视位置以及辅助属性(例如旋转和倾斜)以及在UI中提供反馈很有用。

    此属性在Qt 5.9中引入。

    相关函数

     bool hasTabletTracking() const
     void setTabletTracking(bool enable)
    

    13.45 toolTip : QString

    概属性控制widget的提示信息

    注:默认的提示信息只会显示给活动窗口的子widget。但是我们可以通过给window设置属性 Qt::WA_AlwaysShowToolTips从而将提示信息显示在window上而不是其子widget上。

    如果你想控制提示信息的行为,你可以拦截event()函数,然后截获QEvent::ToolTip 事件(也就是说,你可以自定义提示信息显示的位置)

    默认情况下,该属性为空

    相关函数

     QString toolTip() const
     void setToolTip(const QString &)
    

    13.46 toolTipDuration : int

    该属性控制widget的提示信息持续时间

    指定提示信息显示的事件,按照毫秒计算。如果其值为-1(默认值),那么其持续时间依赖于提示信息的长度

    该属性从Qt5.2引入

    相关函数

     int toolTipDuration() const
     void setToolTipDuration(int msec)
    

    13.47 updatesEnabled : bool

    该属性控制更新是否启用

    一个启用该属性的widget可以接收paint事件,进而拥有一个系统背景,一个禁用该属性的widget却不会接收事件,更不会有系统背景。这意味着在禁用该属性情况下调用updata()函数和repaint()函数没有任何卵用

    默认情况下该属性为true

    setUpdateEnabled()函数,通常用于在一段短时间内禁止widget的更新,例如避免屏幕在一些较大变化情况下发生闪烁。在Qt中,widget通常不会发生闪烁,但是在windows系统上,当widget1被其他widget替代,于是widget1隐藏起来的那个时候,服务器或许会擦除屏幕区域。禁用该属性可以解决这个问题。例如如下代码:

     setUpdatesEnabled(false);
     bigVisualChanges();
     setUpdatesEnabled(true);
    

    禁用一个widget会隐式的禁用其子widget。启用一个widget会隐式的启用其除了顶级窗口之外的其他子widget或者是那些被显式禁用的widget。再次启用update属性会隐式的调用updata()函数。

    相关函数

     bool updatesEnabled() const
     void setUpdatesEnabled(bool enable)
    

    13.48 visible : bool

    该属性控制widget是否可见

    在widget的父widget可见情况下,调用setVisible(true)或者show()函数会使得widget可见。如果有一个祖先widget(父widget或者父widget的父widget等)不可见,那么该widget就不可见。如果大小或者位置发生了改变,那么Qt保证在其显示之前肯定会收到移动或者调整大小的事件。如果widget一直没有被调整过大小,Qt会调用adjustSize()来自适应的显示其大小。

    显式调用setVisible(false)或者hide()函数会隐藏该widget。一个显式隐藏的widget,即使其祖先widget可见,该widget也不会显示,除非你调用函数将其显示。

    一个widget的可见状态发生改变,会收到显示或者隐藏事件。在隐藏和显示事件之间,不需要等待CPU周期或者给用户显示信息。例如,一个视频应用程序,可以简单的停止生成下一帧。

    一个被其他窗口遮挡的widget会被视为可见状态。图标化窗口或者存在于虚拟桌面的窗口也被视为可见状态。一个widget的映射状态被窗口管理系统改变时会自发的收到一个显示或者隐藏的事件。当用户最小化widget时会自己触发隐藏事件,当widget恢复时会自己出发显示事件。

    一般我们根本不需要重载setVisible()函数,如果想在widget显示之前做一些改变,你可以用showEvent().如果你想做一些延迟的初始化动作,那么可以把polish事件传递给event()函数。

    相关函数

     bool isVisible() const
     virtual void setVisible(bool visible)
    

    13.49 whatsThis : QString

    该属性控制widget的帮助按钮的文本信息

    默认情况下,该属性包含的信息为空

    相关函数

     QString whatsThis() const
     void setWhatsThis(const QString &)
    

    13.50 width : const int

    此属性保存窗口小部件的宽度,不包括任何窗口边框。

    有关Windows几何问题的概述,请参见“窗口几何”文档。

    **注意:**请勿使用此功能在多屏幕桌面上查找屏幕的宽度。请阅读此说明以获取详细信息。

    默认情况下,此属性包含一个值,该值取决于用户的平台和屏幕的几何形状。

    相关函数

     int width() const
    

    13.51 windowFilePath : QString

    该属性控制与widget相关的文件路径

    该属性只对窗口window有用,对于子窗口没有任何用。它将一个文件路径和该窗口关联起来。如果你设置了文件路径但是没有设置窗口标题,Qt会把文件路径设置为该窗口标题,获取名字可以用QFileInfo::fileName()

    如果在任何时候设置了窗口标题,那么窗口标题拥有更高的优先级,窗口的标题会是你设置的内容而不是文件路径。

    除此之外,在苹果系统中,如果路径存在的话,也就同时给窗口设置了proxy icon

    如果没有关联文件路径,named该属性包含一个空字符串

    默认情况下,该属性包含一个空字符串

    相关函数

     QString windowFilePath() const
     void setWindowFilePath(const QString &filePath)
    

    13.52 windowFlags : Qt::WindowFlags

    窗口标志是一个类型(例如Qt::Dialog)的并集,或者是空,或者给窗口系统的提示信息Qt::FramelessWindowHint

    如果窗口小部件的类型为Qt :: WidgetQt :: SubWindow并成为窗口(Qt :: WindowQt :: Dialog等),则将其放置在桌面上的位置(0,0)。如果窗口小部件是一个窗口并变为Qt :: WidgetQt :: SubWindow,则将其放置在相对于其父窗口小部件的位置(0,0)。

    注:如果window的窗口标志发生改变,会调用其setParent()函数,从而引起该窗口隐藏。因此你必须手动的再次调用show()函数。

    相关函数

     Qt::WindowFlags windowFlags() const
     void setWindowFlags(Qt::WindowFlags type)
    

    13.53 windowIcon : QIcon

    该属性控制widget的图标

    该属性只对window起作用。如果已经设置了图标,windowIcon()函数返回应用程序图标

    **注意:**在macOS上,窗口图标表示活动文档,除非使用setWindowFilePath设置了文件路径,否则将不会显示窗口图标。

    相关函数

     QIcon windowIcon() const
     void setWindowIcon(const QIcon &icon)
    

    通知信号

     void windowIconChanged(const QIcon &icon)
    

    13.54 windowModality : Qt::WindowModality

    该属性控制被模态widget锁住的window

    该属性只对window有意义。一个模态widget阻止了对其他window的输入。该属性的值包括了在widget可见的情况下被锁住的窗口。window可见的情况下改变该属性没有任何用。你首先应该隐藏窗口,再显示窗口。

    默认情况下,该属性是Qt::NonModal

    相关函数

     Qt::WindowModality windowModality() const
     void setWindowModality(Qt::WindowModality windowModality)
    

    13.55 windowModified : bool

    该属性获取window中显示的文本是否发生了变化并且没有保存

    一个被修改了的窗口,即该窗口内容发生了变化并且没有被写入磁盘。该属性在不同平台有不同的效果。例如在OS X系统上会有一个修改的图标,而window系统会有一个’*’号。

    窗口的标题必须包含一个”[]” 号,占位符,来表明该符号应该出现的位置。正常情况下,该符号应该出现在文件名之后。(例如,”document1.txt[] - Text Editor)。如果该窗口没有被修改,就不会出现’*’号。

    如果一个widget被设置为被修改的状态,其所有祖先都会被设置为被修改状态。但是如果对一个widget设置setWindowModified(false),那么该未修改属性不会传递给其父widget,因为其他子widget或许被修改了。

    相关函数

     bool isWindowModified() const
     void setWindowModified(bool)
    

    13.56 windowOpacity : double

    该属性控制窗口的透明性

    该属性值范围是(1.0~0.0)

    默认该属性为1.0

    警告:将该属性从非透明改变为透明,在窗口显示前会引起一个paint事件。这会影响到QPixmap::grabWindow()大部分的使用功能。同时需要指出的是,半透明窗口的更新和调整大小的速度比非透明窗口要慢。

    相关函数

     qreal windowOpacity() const
     void setWindowOpacity(qreal level)
    

    13.57 windowTitle : QString

    该属性控制窗口标题

    该属性只对顶级窗口有用,例如window和对话框。如果没有设置窗口标题,那么窗口标题默认为windowFilePath,如果窗口文件路径也没有设置,那么标题是一个空字符串。

    如果你会使用窗口是否改变机制,named窗口标题应该有一个“”的占位符,以表明窗口是否被修改过。正常情况下,“”应该出现在标题之后。(例如e.g., “document1.txt[*] - Text Editor”)。如果windowModified属性为false(默认值),那么该占位符也可以很轻松的删除。

    相关函数

     QString windowTitle() const
     void setWindowTitle(const QString &)
    

    通知信号

     void windowTitleChanged(const QString &title)
    

    13.58 x : const int

    此属性保存窗口小部件相对于其父窗口的x坐标,包括任何窗口框架

    有关Windows几何问题的概述,请参见“窗口几何”文档。

    默认情况下,此属性的值为0。

    相关函数

     int x() const
    

    13.59 y : const int

    此属性保存窗口小部件相对于其父窗口的y坐标,包括任何窗口框架

    有关Windows几何问题的概述,请参见“窗口几何”文档。

    默认情况下,此属性的值为0。

    相关函数

     int y() const
    

    14. 附录

    14.1 Qt教程汇总
    网址:https://dengjin.blog.csdn.net/article/details/115174639

    展开全文
  • Python及常见的方法属性定义

    千次阅读 2021-01-29 05:24:45
    Python及常见的方法属性定义Python是一门完全面向对象(OOP)的语言,对于Python来说,一切皆对象,一切皆对象,猫,老虎,狗,狼这些都是我们认识的一种动物,在现实生活我们把它叫做动物,而在面向对象的编程...

    Python类及常见的方法属性定义

    Python是一门完全面向对象(OOP)的语言,对于Python来说,一切皆对象,

    一切皆对象,

    猫,老虎,狗,狼这些都是我们认识的一种动物,在现实生活中我们把它叫做动物,而在面向对象的编程语言(OOP)中我们称这类在生活中的具体事物叫做对象,既然提到对象我们就不得不说一下类,什么是类那,打个比方,就好动物学家通过动物的共同点,把动物进行分类,猫和老虎被分到了猫科,狗和狼被分到了犬科,猫科,犬科实际上就是一种类,因为他们具备了猫和老虎的共同点,所以你就可以把类理解为事物共同点的抽象

    不过在现实生活我们是通过对象去认识类的,而在编程语言中我们把他进行了反转,是通过类去认识对象,

    对象和类

    对象就是类的实例化,类就是对象的具体抽象

    面向对象的三大特征

    封装(encapsulation)

    继承(inheritance)

    多态(polymorphism)

    开发的过程:其实就是不断的创建对象,使用对象,指挥对象做事情。

    设计的过程:其实就是在管理和维护对象之间的关系.

    在Python中的类

    定义类

    3d7b3b67ab03d7b96466f04569f31b5e.png

    定义一个简单的person类,在这个类里没有定义任何方法

    创建类

    在上面我们定义了一个类,下面我们就用这个类创建一个实例对象P

    3879cf65d1cfb4e5ec7146c0ea1cdd6d.png

    定义一个带方法的类

    e9960af5156ac4f2b6e36c77bc68d110.png

    创建一个类调用方法

    c2b6a1435fbaafded7b6f95751571a99.png

    定义一个带有各种常用变量,方法类型的类

    class Person(object):

    '''

    起到限制作用,表示在类中只能有这三个属性,不可以在动态或静态的添加对该类的实例添加属性

    注意在使用__slots__限制变量时,如果加入类变量的名称不发生错误,如下

    错误写法:

    __slots__ = ("_id", "name","__age","address")

    '''

    __slots__ = ("_id", "name", "__age")

    address = "我是一个类变量,可以被类名直接调用"

    def __new__(cls, *args, **kwargs):

    print("创建类时调用")

    return object.__new__(cls)

    def __init__(self):

    self.name = "我是一个全局变量,在任何地方都可以调用"

    self._id = "我只可以在本模块里被调用"

    self.__age = "我是一个私有变量,只能在本类里调用不能再外部调用"

    print("初始化实例变量时被调用")

    def test(self):

    print("我是一个实例方法只有对象被创建才可以被对象调用")

    def __testPri(self):

    print("我是一个私有方法,不可以被外不调用")

    @staticmethod

    deftestStatic(self):

    print("我是一个静态方法可以直接用类名被调用")

    @classmethod

    def testCls(cls):

    print("我是一个类方法可以直接用类名被调用")

    def __del__(self):

    print("类被销毁时调用")

    def __str__(self):

    print("返回对类的描述")

    return "我是%s"%self.__class__.__name__

    def __call__(self, *args, **kwargs):

    print("类被当做函数使用时调用")

    各种变量,内置方法浅解

    __new__

    2a6ca80b7344c8ae26b858effa7e22b2.png

    1,__new__方法只能在继承了object的新式类中使用,在object类中将__new__方法定义为静态方法,至少需要传递一个参数cls,cls表示需要实例化的类对象,

    此方法在你实例化对象时自动调用,cls参数也由Python解释器自动提供。

    2,复写__new__必须时要有返回值,返回实例化出来的实例对象,可以return返回父类__new__出来的实例,或者直接是object的__new__出来的实例都可以,上文是直接调用object的__new__方法

    3,__new__()是唯一在实例创建之前执行的方法,一般用在定义元类时使用

    __init__

    406a5c8575409344b9b6f996b2b4b299.png

    1,__init__方法由Python解释器自动调用,在调用时会自动传入一个本类的实例变量

    2,__init__方法是在__new__之后调用的,因为Python解释器需要__new__返回的实例对象,作为参数传入__init__方法

    3,__init__主要用于初始化本对象的实例变量或初始化父类的实例变量

    初始化父类的实例变量如下:

    superName.__init__(self)

    super(superName, self).__init()#新式类中使用

    4, __init__不需要返回值

    __del__

    ad827c27c647d1d22a2f13cdc272f683.png

    1,__init__方法由Python解释器自动调用,在调用时会自动传入一个本类的实例变量

    2,__del__是在python删除一个对象时有Python自动调用的,

    那什么时候,会让Python内存管理机制认为他是需要删除的那,当他的引用计数器为零,也就是没有没有任何引用时Python会认为他需要被释放,然后调用__del__方法

    查看一个对象的引用计数

    importsys

    sys.getrefcount(object )

    __str__

    c5aed284c71d0a58d9928fedc3937d2f.png

    1,此方法的作用,是描述一个类描述,如果没有重写会直接返回一个类的

    类名 父类at存储地址>

    __call__

    0bb811c15dd8cea6065f00e85036b8ba.png

    如果重写类这个方法,就可以把这个类型的对象当做函数来用,相当于重载了括号运算符,

    在类装饰器会用到

    私有化实例变量

    9e8d666cdfff2716227bb9e1e9812c69.png

    1,设置类的属性为__,不能使用对象名.属性名的方式直接访问对象的属性。就好像java的private一样,可以达到封装的目的,

    那我们我怎么对该属性设置值和访问那

    1:对外提供公开的用于设置对象属性的public方法

    1:设置set

    2:获取get

    2:在set方法中加入逻辑判断,过滤掉非法数据。

    3:将所有的成员变量封装加上__,提供get、set方法,

    Ps:其实在python中的,类的私有化是通过改变属性名实现的,修改规则如下:

    _类名__属性名

    调用使用被Python修改过得私有属性

    24d5e218aaca93bc95fde7ff06757e31.png

    打印结果

    a37290ed8da657143098073d202433d3.png

    131684dd46a94510679df2e59fc59aec.png

    2,私有化属性也是实例属性,Python每创建一个实例对象,就会在内存空间中开辟一处内存,每处内存空间都有实例属性,他们不会相互影响,也就是说你修改一个对象的实例属性,另一个同类对象的同名属性不会受到影响,是相对独立

    单下划线变量

    _xx以单下划线开头的表示的是protected类型的变量。即保护类型只能允许其本身与子类进行访问。若内部变量标示,如: 当使用“from M import”时,不会将以一个下划线开头的对象引入

    类属性

    c441ab744a248f53269e851d03816aae.png

    1,类属性是指,那些定义在类里,方法之外的属性

    2,类属性,不随实例对象的创建而创建,无论你使用该类创建多少个实例对象,类属性只存在一个

    3,类属性就是类对象拥有的属性,他被类对象的所有实例对象所共有,可用于实例对象间的数据共享,不可以用self.类属性,因为self代表当前调用者对象,

    4,使用类属性时 需要用 类名.类属性名或 类对象的实例对象.类属性名访问,,如果要修改值时,需要用 类名.类属性名=“xxx” 去修改,不可以用 类对象的实例对象.类属性名,

    如果使用 类对象的实例对象.类属性名 修改,则相当于为该对象添加了一个实例属性,

    静态方法

    010be05fb81d25ca9d5cfc14ce5a8bf0.png

    1,静态方法要使用@staticmethod修饰,要不然就是实例方法

    2,静态方法可以不写参数,但如果这样就不能调用当用实例属性

    3,在无参静态方法里不可以调用实例属性,self,super,因为静态方法是先于实例对象存在的,

    4,要想在静态方法里调用实例方法,可以在静态方法中写上参数,把当前实例对象当做实参传给静态方法,这样就可以间接的调用静态方法

    如下

    52db4e5a58f4f59ad76b95fcc2790a95.png

    类方法

    07bb90b7c924f601ca9dc7a63e952e5d.png

    1,类方法是类对象的方法,只有一个

    2,类方法要使用@classmethod修饰,要不然就是实例方法

    3,类方法的第一个参数是类对象,由Python自动传入,

    4,在类方法里不可以调用实例属性,self,super,因为类方法是先于实例对象存在的,

    私有方法

    402d85d81423b73af1cad8420594a4c2.png

    1,在Python中私有方法通过前面加两个下划线来定义如:def __xx(self):

    2,只有该类对象的实例对象可以访问子类已不可访问,不可以在外部调用,

    创建对象的调用顺序

    1,先调用__new__方法,由此方法返回一个实例对象给调用者(Python解释器)

    2,调用者(Python解释器)在把刚刚创建的 实例对象 作为实参传递并调用__init__方法,完成初始化

    3,并返回实例对象的引用

    展开全文
  • 在Qt Designer,提供了八大可视化组件(也称为组件或控件,下同),分别布局组件(Layouts)、分隔组件(Spacers)、按钮组件(Buttons)、表项视图(item views)、表项组件(item widg...

    本文适用人员:本文比较长,适合不理解Qt Designer部件属性的人员阅读或资料查找。

    声明
    1、如果有人认为本文是简单的复制粘贴+翻译而成,敬请读本文最后的后记;
    2、本文为老猿Python学习研究精心整理而成,禁止转载。

    内容提纲

    引言
    概述
           QWidget属性列表
           Qt Designer组件属性归类
    组件大小及位置控制的属性
    界面响应事件控制属性
    信息管理属性
    外观控制属性
    后记

    一、引言

    在Qt Designer中,提供了八大类可视化组件(也称为组件或控件,下同),分别为布局组件(Layouts)、分隔组件(Spacers)、按钮组件(Buttons)、表项视图(item views)、表项组件(item widgets)、容器(Containers)、输入组件(input widgets)、显示组件(Display widgets),在Qt Designer的应用界面设计时,可以将各种功能的组件拖拽到窗口上进行应用的可视化界面设计,而每种组件又可以指定不同的属性。

    组件的属性设置在Qt Designer中的组件属性编辑部分进行设置的,如下图右边部分窗口:
    在这里插入图片描述
    可以看到,将相关属性栏目节点收敛后,最顶层的节点为组件对应的类及所有父类,并且从上往下排列的节点,基本上按照父类在上,子类在下的方式排列,很好的体现了类的继承关系以及相关属性是哪个类提供的。上图中类的属性展开后截图如下:
    在这里插入图片描述
    在Qt Designer中对八大类组件逐一浏览后,从组件的设置属性界面我们可以看到,除了布局组件(Layouts)和分隔组件(Spacers),其他六大类组件都有共同的父类QWidget以及QObject,其中QObject 只有简单的属性objectName,而QWidget则有三十一项的设置属性,并且占了所有部件所有属性的大部分,因此组件属性的设置很大一部分就是对组件与QWidget类相关属性的设置。因此本节将详细介绍Qt Designer与QWidget类相关的组件属性的含义。

    二、 概述

    不同的组件类型,其与QWidget类相关属性在属性设置界面展示的属性有所区别,这是因为虽然所有属性都来自QWidget定义的属性,但不同组件功能方面的差异导致有些属性不需要使用(如组件的标题对按钮就没有作用),因此属性设置界面把与具体组件无关的QWidget属性屏蔽了,但窗口类应该是包含了所有其他组件都会引用的QWidget属性,因此我们接下来的介绍就是以新建窗口时选择Widget模板新建的窗口对应属性来介绍。

    Qt Designer新建窗口时的操作界面如下:
    在这里插入图片描述
    窗口新建完成后对应的属性编辑界面截图如下:
    在这里插入图片描述
    注意
    Qt Designer中可以设置的QWidget属性比QWidget类的属性要少,只是QWidget类属性的一个子集,下表是QWidget所有属性(其中标黄色的是属性编辑界面没有的属性)。

    QWidget属性列表

    在这里插入图片描述
    老猿没有仔细研究这些未出现在编辑界面的属性,只是大概看了下,发现没有出现的部分属性有几种情况:

    1. 相关属性包含在另外的属性中,如x、y、height、width属性包含在geometry 属性中,maximumWidth、maximumHeight 包含在maximumSize属性中等;
    2. 部分属性是只读的,是Qt系统设置的,不能设置,如sizeHint和minimumSizeHint等;
    3. 有些属性是通过其他属性计算得出的,如Rect可以通过geometry 的height、width属性得出;
    4. 有些属性是运行时的数据,无需设置,如focus、size、pos、visible、minimized 、maximized 等。

    因为没有研究不在属性设置界面的所有属性,只是针对其中简单的看了看,并没有将所有非界面属性都仔细研究,因此除了上述几种情况是否还有其他情况不能确认。

    Qt Designer中可以设置的QWidget属性共有31个,老猿将其分为四大类。

    在这里插入图片描述

    三、 组件大小及位置控制的属性

    组件大小控制的属性有geometry 、baseSize、sizeIncrement、minimumSize、maximumSize和sizePolicy,用于控制组件的初始大小以及动态调整大小的控制。属性配置界面的geometry 定义了组件的初始大小,其他属性都与组件大小调整时控制组件的大小相关。
    3.1、geometry属性
    geometry属性保存组件相对于其父级对象的位置和大小,Qt实际上是以一个长方形来表示组件的位置和大小的,包括左上角的坐标位置、长度和宽带。

    当组件的geometry调整时,组件如果可见将立即接收moveEvent事件和/或调整大小事件resizeEvent事件。如果件当前不可见,则保证它在显示之前接收适当的事件。如果组件的geometry被要求调整到超出minimumSize()和maximumSize()定义的范围之外时,则Qt会强制组件的大小必须在定义的范围内。

    可以使用geometry()查询该属性的值,使用setGeometry(int x, int y, int w, int h)或setGeometry(QRect )设置该属性的值。与此属性关联的函数有: frameGeometry()、rect()、move()、resize()、 moveEvent()、resizeEvent()、minimumSize()和 maximumSize()。

    注意:
    1、 大小的计数单位都是像素,相关数字不包括窗口框架占用的位置;
    2、 Qt中组件的坐标是以组件的左上角为原点、x轴向右、y轴向下的坐标体系。

    3.2、baseSize属性和sizeIncrement属性
    3.2.1、baseSize
    组件的 baseSize是组件的基础大小(单位:像素),如果组件设定了sizeIncrement,该属性用于在调整组件尺寸时计算组件应该调整到的合适值,但这个属性缺省值是QSize(0,0),需要使用setBaseSize(int basew, int baseh)设置该值,要查询该值使用baseSize()方法。

    3.2.2、sizeIncrement
    sizeIncrement表示组件调整大小时的每次变化的增量大小(单位:像素)的基数,实际调整大小计算公式如下:
    width = baseSize().width() + i * sizeIncrement().width()
    height = baseSize().height() + j * sizeIncrement().height()

    其中i,j为非负整数。

    sizeIncrement的缺省值是QSize(0,0),可以调用setSizeIncrement(QSize)、setSizeIncrement(int w, int h)设置sizeIncrement,调用sizeIncrement()获取sizeIncrement的值。

    注意:所有组件都可以设置sizeIncrement,但只有窗口对象会生效。

    3.3、mimimumSize属性和maximumSize属性
    3.3.1、mimimumSize
    mimimumSize表示部件能被缩小到的最小尺寸,单位为像素,缩小到该尺寸后不能再进一步缩小了。如果部件在布局管理器中,且布局管理器也设置了最小尺寸,则部件本身的最小尺寸以部件的mimimumSize为准,布局管理器设置的不起作用。

    部件的最小尺寸可以调用方法setMinimumSize(QSize)或setMinimumSize(int minw, int minh)进行设置,使用minimumSize()返回当前值,如果值被设置为QSize(0,0)则表示最小尺寸无效。

    3.3.2、maximumSize
    maximumSize表示部件能被放大到的最大尺寸,放大到该尺寸后不能再进一步放大了。部件的缺省最大值为QSize(16777215,16777215)
    部件的最大尺寸可以调用方法setMaximumSize(QSize)或setMaximumSize(int maxw, int maxh)进行设置,使用maximumSize()返回当前值,部件的最大值不能超过系统设置部件的最大值常量QWIDGETSIZE_MAX 。

    3.4、sizePolicy属性
    部件的sizePolicy属性用于说明部件在布局管理中的缩放方式,当部件没有在布局管理器中时,该设置无效。

    在理解sizePolicy前,先介绍两个Qt内置的部件属性sizeHint和minimumSizeHint,分别表示部件的缺省大小、minimumSizeHint建议最小尺寸。

    1、sizeHint:为布局管理器中部件的缺省大小,如果部件不在布局管理中就为无效的值,该值是Qt中对每个部件大小的建议值,也是缺省值,不能修改;
    2、minimumSizeHint:为Qt推荐的部件最小大小,如果部件不在布局管理中就为无效的值,在布局管理器中minimumSizeHint 就是部件的缺省最小值,除非当前部件的大小策略为QSizePolicy.Ignore或者minimumSize被设置,布局管理器不会调整一个部件的大小到比minimumSizeHint 返回值更小的大小。

    sizePolicy由四个值组成,分别是水平缩放策略、垂直缩放策略、水平伸缩因子、垂直伸缩因子。
    1、缩放策略
    水平缩放策略、垂直缩放策略的值都是枚举类型Policy,该枚举类型的取值及含义如下:
    在这里插入图片描述
    其中,相关值内的常量由枚举类型 QSizePolicy.PolicyFlag定义,对应取值及含义如下:
    在这里插入图片描述
    2、伸缩

    四、 界面响应事件控制属性

    界面响应事件控制属性是指针对组件对键盘、鼠标事件以及平板触控笔的事件响应的控制,它包括acceptDrops、contextMenuPolicy、cursor、enabled、focusPolicy、inputMethodHints、mouseTracking、tabletTracking、windowModality、windowTitle这9个属性。

    4.1、enabled属性
    enabled属性非常简单,最开始老猿没准备介绍该属性的,因为大家都应该知道,但仔细看了看官网文章,觉得还是有些细节可能很少有人注意到,因此还是在此介绍一下。

    enabled属性用于表示部件是否可用,一个可用的部件可以接收和处理鼠标和键盘事件,当部件不可用时则无法接收和处理鼠标和键盘事件。

    有些部件在被禁用时会以不同的方式显示自己。例如,按钮可能会将其标签灰显。如果部件需要知道它何时被启用或禁用,则可以使用changeEvent()方法来捕获事件,事件类型设置为QEvent.EnabledChange。

    禁用一个部件时会隐式禁用其所有子部件,启用部件时将顺序启用所有子部件,除非子部件已被显式禁用。当父部件保持禁用状态时,不可能显式启用不是窗口的子部件。

    enabled属性缺省值为True,可以 通过isEnabled()访问部件的启用状态,通过setEnabled(bool)设置部件的启用状态。

    4.2、acceptDrops属性
    acceptDrops属性表示当前部件是否接受鼠标拖放事件,鼠标拖放应该是与鼠标拖拽结合在一起的,在Qt Designer中可以通过属性acceptDrops设置部件是否接受鼠标拖放事件。如果部件接受拖放,则在鼠标拖放时,拖放事件会发送给鼠标当前光标下接受拖放的第一个部件。

    如果一个部件设置了acceptDrops属性为True,则就是通知系统该部件可能接受鼠标拖放事件。

    注意:
    1、如果当前部件是一个桌面(windowType() == Qt.Desktop), 如果此时另一应用正在使用桌面则这个属性设置可能失败;
    2、不要在拖、放事件的处理方法中修改该属性。

    使用acceptDrops()获取当前部件是否支持拖放;使用setAcceptDrops(bool on)设置当前部件是否支持拖放。

    4.3、contextMenuPolicy属性
    contextMenuPolicy为部件的快捷菜单策略,快捷菜单通过在部件上点击鼠标右键触发。

    快捷菜单策略通过枚举类型Qt.ContextMenuPolicy来定义,对应枚举类型取值及含义如下:
    在这里插入图片描述
    通过contextMenuPolicy() 可以获取当前部件的快捷菜单策略;通过setContextMenuPolicy(Qt.ContextMenuPolicy policy)可以设置当前部件的快捷菜单策略。

    4.4、focusPolicy属性
    在Qt Designer中可以设置部件的焦点策略,部件的焦点策略属性取值范围由枚举类型Qt.FocusPolicy来定义,该枚举类型及其含义如下表所示:

    在这里插入图片描述
    部件可以通过focusPolicy()可以获取当前部件的焦点策略,通过setFocusPolicy(Qt.FocusPolicy policy)设置焦点策略。

    4.5、mouseTracking和tabletTracking属性
    mouseTracking和tabletTracking这两个属性是跟踪鼠标或平板触控笔的移动轨迹的。

    4.5.1、mouseTracking
    mouseTracking属性用于保存是否启用鼠标跟踪,缺省情况是不启用的。没启用的情况下,对应部件只接收在鼠标移动同时至少一个鼠标按键按下时的鼠标移动事件,启用鼠标跟踪的情况下,任何鼠标移动事件部件都会接收。

    部件方法hasMouseTracking()用于返回当前是否启用鼠标跟踪,setMouseTracking(bool enable)用于设置是否启用鼠标跟踪。与鼠标跟踪相关的函数主要是mouseMoveEvent()。

    4.5.2、tabletTracking
    tabletTracking属性保存是否启用部件的平板跟踪,缺省是不起用的。没有启用平板跟踪的情况下,部件仅接收触控笔与平板接触或至少有个触控笔按键按下时的触控笔移动事件。
    如果部件启用了平板跟踪功能,部件能接收触控笔靠近但未真正接触平板时的触控笔移动事件,这可以用于监视操作位置以及部件的辅助操作功能(如旋转和倾斜),并为图形界面提供这些操作的信息接口。

    部件方法hasTabletTracking()用于返回当前是否启用平板跟踪,setTabletTracking(bool enable)用于设置是否启用平板跟踪。与平板跟踪相关的函数主要是 tabletEvent()。

    4.6、inputMethodHints属性
    inputMethodHints属性只对输入部件有效,输入法使用它来检索有关输入法应如何操作的提示,例如,如果设置了只允许输入数字的标志,则输入法可能会更改其可视组件,以反映只能输入数字。相关取值及含义如下:
    在这里插入图片描述
    输入提示是多种值的组合,多个值之间通过或操作组合。

    如果几个独占标志被放在一起,则生成的字符集将由指定集的并集组成。例如,指定ImhNumbersOnly 和ImhUppercaseOnly 将产生一个由数字和大写字母组成的集合。

    该属性缺省值为Qt.ImhNone,可通过inputMethodHints() 和setInputMethodHints(Qt.InputMethodHints )进行访问和修改。

    注意:
    1、 修改时最好先取到当前设置,再与要修改值进行或后再设置;
    2、 该属性仅作为一个输入提示,并不是所有输入法都会支持,老猿验证了几个中文输入法好像都不支持。

    老猿认为该属性没有多大用途,一是因为输入法不一定支持,二是因为并不能严格限制输入数据。

    4.7、cursor属性
    部件的cursor属性保存该部件的鼠标光标形状,当鼠标位于该部件上时就会呈现该属性设置的光标形状,对应类型为枚举类型Qt.CursorShape,可取值的范围及含义如下:
    在这里插入图片描述

    注意:
    1、上述列表中,最后4个取值在Designer中没有,这是因为这4个取值不是在属性编辑中静态设置的,而是在运行时调整的;
    2、上述列表中英文和译文都列出的是老猿花时间比较多的取值解释,但还是怕翻译得不够准确,所以列出英文进行对照。

    4.8、windowModality属性
    windowModality属性只对窗口对象有效,保存的是哪些类型的窗口被模式窗口阻塞。
    模式窗口防止其他窗口中的部件获取输入。此属性的值控制对应窗口可见时阻塞哪些类型的窗口获取输入。在模式窗口可见时更改此属性无效,必须先调用hide()隐藏模式窗口,然后再调用show()显示模式窗口。

    相关取值及含义如下:
    在这里插入图片描述

    五、 信息管理属性

    信息管理属性包括accessibleDescription、accessibleName、statusTip、toolTip、toolTipDuration、whatsThis、locale、windowFilePath、windowTitle这9个属性,这些属性与帮助、提示、窗口标题、残障人士辅助信息、语言国际化支持等方面,都与应用呈现给用户的文本信息有关,因此老猿将其归类到信息管理。

    5.1、locale国际化支持
    locale属性用于设置语言环境,包括语言和国家。如果一个部件没有设置语言环境,则使用父对象的语言环境或者默认语言环境(如果部件是顶层部件)。

    可以使用locale()获取部件的语言环境,也可以通过 setLocale(QLocale )设置部件的语言环境,还可以通过unsetLocale()取消部件的语言环境设置。

    5.2、 translatable、 disambiguation和comment子属性
    每个显示的文本信息包括Label的文本、按钮的文本等、以及输入控件的输入内容、帮助信息的文本等都可以在部件属性编辑中设置国际化子属性,如:
    在这里插入图片描述
    在这里插入图片描述
    它们都有三个子属性,分别是translatable、 disambiguation和comment,这三个属性的含义分别如下:
    1、translatable可译:表示对应属性文字不用翻译成其他语言;
    2、disambiguation消除歧义:这是当有多个需要翻译文字的对象有相同文字时,避免出现歧义而额外添加的消除歧义字符,缺省为空,一般歧义字符设置为其所在对象对应类的名字,此消歧参数是为转换器指定注释的首选方法。
    3、comment注释:添加注释用于辅助对属性文字的翻译,注释将在翻译属性文字时传递到翻译的函数tr()中并与需要翻译对象关联,这样会有助于理解翻译的文字含义。

    对于国际化,老猿没有研究过,也不准备去研究,之所以列这三个属性的国际化属性,纯粹是因为才开始老猿对这三个属性不知道,并且基本上查不到资料。没接触过的人看到这会一头雾水,因此通过各种方法查阅了很多资料,结合各种资料以及自己的理解单独在此解释一下,可能不完全正确。这这部分内容,无需国际化的人不需要关注,需要国际化的人则需要另外专门研究。

    5.3、toolTip、toolTipDuration、statusTip、whatsThis属性

    这几个属性与帮助和提示信息相关,除了toolTipDuration外,都有国际化设置的子属性。
    5.3.1、toolTip属性
    toolTip属性设置部件的toolTip提示信息,toolTip提示信息在鼠标放到控件上会浮动出一个小框显示提示信息。默认情况下,仅显示活动窗口子部件的toolTip,可以通过在窗口对象设置Qt.WA_AlwaysShowToolTips属性来改变,但不能是需要显示tooTip的部件对象中设置。

    如果要控制tooTip显示的行为(如控制显示位置),可以重写部件的event()方法捕获事件类型为QEvent.ToolTip的事件。

    缺省值为空,可以通过toolTip()和setToolTip( QString )来读取和设置toolTip。

    5.3.2、toolTipDuration属性
    toolTipDuration 属性控制toolTip显示的时长,单位是毫秒,如果设置为-1,则显示时长根据toolTip内容的长度来计算。
    toolTipDuration 缺省值为-1,可以通过toolTipDuration ()和settoolTipDuration ( int msec)来读取和设置toolTipDuration 。

    5.3.3、statusTip属性
    statusTip属性保存statusTip提示信息,statusTip提示信息在鼠标放到控件上时在窗口的状态栏显示提示信息,如果窗口无状态栏则不显示。

    statusTip属性 缺省值为空字符串,可以通过statusTip()和setstatusTip ( QString )来读取和设置statusTip。

    5.3.4、whatsThis
    whatsThis属性保存部件的帮助信息。whatsThis的帮助信息一般在部件获得焦点后按Shift+F1弹出显示,如果这个快捷键被别的功能占用,则whatsThis的帮助信息可能无法展示。有些对话窗提供一个带问号的按钮可以点击显示whatsThis的帮助信息。

    whatsThis属性 缺省值为空字符串,可以通过whatsThis()和setwhatsThis ( QString )来读取和设置whatsThis。

    5.4、accessibleDescription和accessibleName辅助阅读属性
    accessibleDescription和accessibleName属性都是用于残疾人辅助阅读的,这两个属性都有国际化属性。

    5.4.1 accessibleName属性
    这是辅助阅读中显示的部件的名称,对于大多数小部件,无需设置此属性,因为Qt会调用部件相关属性显示,如按钮将显示按钮的文本,但当小部件不提供任何文本时,设置此属性很重要。例如,只包含图标的按钮需要将此属性设置为与屏幕阅读器一起使用。

    此属性默认为空,通过accessibleName() 和setAccessibleName(QString )可以对该属性进行查询和设置。

    5.4.2 accessibleDescription属性
    此属性保存辅助技术所看到的部件描述,是对accessiblename的补充说明。

    此属性默认为空,通过accessibleDescription () 和setAccessibleDescription (QString )可以对该属性进行查询和设置。

    5.5、windowTitel属性
    windowTitle仅对window和dialog类型的对象生效。
    windowTitle是窗口的标题,可以通过windowTitle() 、setWindowTitle(const QString &)进行读取和设置。

    5.6、windowFilePath属性
    windowFilePath属性仅对窗口对象有效,用于关联一个窗口和对应的文件及路径。
    当窗口没有设置标题属性的情况下,则窗口标题展示展示windowFilePath对应的文件名的信息(路径信息不展示),如果二者都设置,则优先使用窗口标题属性的设置作为标题。

    该属性缺省为空,可以通过windowFilePath()和setWindowFilePath(QString )来访问和设置windowFilePath属性。

    这个功能在窗口打开文件进行操作时可以使用来标记打开的文件。

    注意该属性有国际化设置的子属性。

    六、 外观控制属性

    外观控制属性包括autoFillBackground、font、layoutDirection、palette、styleSheet、windowIcon、windowOpacity这七个属性,基本都与部件的外观相关。

    6.1、palette属性和字体font属性设置
    在Qt Designer的部件属性中,有个部件调色板(palette)的属性,进入后,如下图所示:
    在这里插入图片描述
    Qt中提供的调色板palette用于管理控件的一组外观显示设置组成,组中每条记录包括颜色角色、颜色组、具体颜色,对应PyQt中的QPalette类。QPalette类相当于对话框或控件的调色板,管理着控件和窗体的所有颜色。

    6.1.1、color role颜色角色
    上图中蓝色标记的color role颜色角色是指界面中颜色对应的部分界面外观组合,又称为颜色职责,即对应界面中哪些部分使用指定某个颜色。通过枚举变量QPalette.ColorRole来定义,取值及其含义如下:
    在这里插入图片描述
    6.1.2、颜色组ColorGroup
    颜色组是指对应同一外观组合在活动状态(active,指获得焦点 ) 、非活动状态(inactive,未获得焦点但可以获得焦点的状态 )、禁止状态(disable,不能获得焦点 )时的对应颜色。上图中只有active 状态的,其他两种状态颜色是电脑根据规则计算出来的,如果要查看或者设置颜色组的三种状态,在上图中选择“show details”即可,如下图:
    在这里插入图片描述
    上面两个截图中的预览窗口是调整调色板的设置后对一个作为案例的窗口外观影响的预览。

    6.2、字体设置
    在Qt Designer中部件的Font属性中可以设置对应部件的字体属性,包括字体的字体簇(Family)、大小(Size)、是否粗体(Bold)、是否斜体(Italic)、是否带下划线(Underline)、是否带删除线(Strikeout)、是否调整字符间距(Kerning,调整字形间距,且基本上是英文字符形状的间距,因为英文字符形状都是不规则的,有宽有窄,有的圆乎乎,有的棱角分明,就会导致排列在一起的时候疏密不一致,而kerning可以有效利用字符形状间的间隙,使字形之间的空间更加相似)、是否反走样抗锯齿(Antialiasing,请参考《QT QPainter::antialiasing QPainter::textAntialiasing 反走样、抗锯齿探究》)这些属性。

    注意:如果Qt Style Sheets与setFont()在同一个部件上使用,则如果设置冲突,样式表将优先。

    6.3、windowIcon属性
    windowIcon对象为部件对象的属性,但只有窗口对象有效,其他派生对象如pushButtong对象无效。

    在windowIcon对象上有如下子属性设置:
    在这里插入图片描述

    这几个子属性实际上是QIcon类中继承的。它们的含义如下:
    6.3.1、Theme(图标主题):图标主题是一组具有相同外观和感觉的图标,从程序员的角度来看,图标主题只是一个映射。给定一组要在其中查找图标的目录和一个主题名称,它将图标名称和标称图标大小映射到图标文件名。
    关于图标主题的内容老猿没有弄清楚,猜测可能是图标文件和目录以及大小有套规范,然后对应用指定主题,就可以在主题对应目录自动按照规范查找对应的图标。
    有几个网址可以参考一下:
    《Icon Naming Specification》https://specifications.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html
    《Icon Theme Specification》https://specifications.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html

    6.3.2、Normal off…Selected On
    上图中所示的Normal off到Selected On这8个子属性应该是QIcon的两个属性的组合,分别指定部件在这8种状态下使用哪个图标。这两个属性分别是QIcon的如下两个枚举类型成员:
    1、enum Mode { Normal, Disabled, Active, Selected }
    四个值分别表示:
    1)QIcon.Normal:部件为使能状态,但未激活,没有获得焦点。
    2)QIcon.Disabled:部件为禁用状态。
    3)QIcon.Active:部件为激活状态,获得了焦点(如鼠标悬停在上面,或Tab键移动焦点)。
    4)QIcon.Selected:部件被选中。
    当部件的状态切换时,默认的图标绘制函数会自动根据部件的状态重绘图标。

    2、enum State { Off, On }
    某些部件还有所谓的开关状态(比如一个按钮可以有按下和弹起两个状态),则还可以根据 state 参数来选择不同的图像。

    因此上述两个类型的组合对应了8种状态就是Designer图标的8个子属性。

    注意:如果theme设置了,则优先使用theme去加载图标,只有找不到的情况下才使用下面每种状态的图标。

    6.4、windowOpacity属性
    这个属性仅对window对象生效。
    windowOpacity为浮点数,表示透明度,为1完全不透明,为0完全透明,缺省是1。

    可以通过windowOpacity()、setWindowOpacity(qreal level)进行读取和设置。

    6.5、layoutDirection属性
    layoutDirection属性保存的是部件的布局方向,有三个取值:
    在这里插入图片描述
    在部件上设置布局方向时,它将传播到部件的子级,但不会传播到作为窗口的子级,也不会传播到已显式调用setLayoutDirection()的子级。此外,为父级调用setLayoutDirection()之后添加的子部件不会继承父级的布局方向。

    在Qt Designer中修改了一个部件的布局方向时,所有未单独设置布局方向的子部件的布局方向全部跟随调整,单独设置了不跟随调整。

    注意
    1、自qt 4.7以来,此方法不再影响文本布局方向;
    2、此属性调整只影响布局内的部件排列,不影响绝对部件的部件排列;
    3、布局方向调整在Designer设计时立即生效,无需到运行时。

    案例
    1、 如下图,窗口布局类型为从左到右,下面六个按钮的排列显示为:
    在这里插入图片描述
    2、 调整窗口的布局方向为从右到左,则六个按钮的排列显示为:
    在这里插入图片描述
    可以看到1、 2、3号三个按钮由于是绝对布局,两种排列方向其界面上的顺序没有变化,而4、 5、 6在布局中,两种排列方向的按钮顺序颠倒了。

    请注意:窗口的主菜单也靠右排列了。

    6.6、 autoFillBackground属性
    autoFillBackground属性可以确认部件背景是否自动填充,如果自动填充,Qt会在调用Paint事件之前填充部件的背景。使用的颜色由部件调色板中的QPalette.window 颜色角色定义。

    此外,除非设置了WA_OpaquePaintEvent 或 WA_NoSystemBackground属性,否则窗口始终使用QPalette.Window对应颜色填充。

    如果部件的父级对象背景具有静态渐变,则无法关闭此属性(即不能设置为False)。

    警告:在使用Qt Style Sheets时请小心使用此属性。当部件具有具有有效背景或边框图像的样式表时,此属性将自动禁用。

    默认情况下,此属性为False。

    可以使用autoFillBackground()和setAutoFillBackground(bool enabled)对该属性进行读取和设置。

    6.7 styleSheet属性
    styleSheet属性是定义部件外观的属性样式表,在Qt中styleSheet样式表是类似于html的css样式一样的方法,只是时专门为Qt中的部件开发的。styleSheet的定义语法也是类似CSS,并且是跨平台支持的。

    由于每个部件都可以定义自己的样式,也可以通过QApplication.setStyleSheet()在整个应用程序上设置样式。如果在不同级别设置了多个样式表,qt将从所有设置的样式表中派生出有效的样式表。这叫做样式级联。

    6.7.1、Qt Designer中定义样式
    在部件的styleSheet属性中,点击属性进入属性设置,会出现如下内容:
    在这里插入图片描述
    点击省略号的按钮,则进入样式编辑器:
    在这里插入图片描述
    6.7.2、styleSheet样式表
    样式表由一系列样式规则组成。样式规则由选择器和声明组成。选择器指定哪些部件受规则影响;声明指定应在部件上设置哪些属性。如:

    QPushButton { color: red }
    

    在上面这个样式规则中,QPushButton 是选择器,{ color: red }就是声明,表示所有QPushButton 按钮及其派生类对象的文本颜色设置为红色。如果该规则样式表应用在窗口上,则窗口上所有没有指定styleSheet的pushButton部件的文字颜色会显示为红色,通过styleSheet指定了color的则按自己指定颜色显示。
    在这里插入图片描述
    上述截图的窗口定义了样式:QPushButton { color: red },而PushButton3则定义了样式:QPushButton { color: blue},因此展示效果如上。

    注意:在Qt样式定义语句中,通常情况下是大小写都可以,但类名、对象名和Qt属性名是大小写敏感的。
    因此QPushButton { color: red },也可以写成:QPushButton { Color: Red }、QPushButton { COLOR: RED}、QPushButton { Color: REd}等形式,但不能写成qpushbutton { color: red }、QPUSHBUTTON { color: red }等形式。

    关于Qt样式表的详细语法规则请见Qt文档官网《The Style Sheet Syntax》。

    可以使用styleSheet() 、setStyleSheet(QString )来获取或设置部件的样式表。

    七、 后记

    终于将Qt Designer中与QWidget类相关的属性介绍完了,从9月下旬开始学习PyQt的GUI程序开发,刚使用Qt Designer设计GUI界面时,对于桌面上那么多控件一个个都不了解,到处找资料,基本没有全面介绍界面控件的,单个的控件有些能找到一些内容,但都不够详细,有些根本就没有。后来终于找到了Qt文档官网的地址(https://doc.qt.io/qt-5/reference-overview.html),能解决将近80%的问题,但可能还有20%的问题解决不了,这20%总结来包括如下一些方面:
    1、 在国内相对冷门且不好验证的知识,如国际化、输入法提示等;
    2、 一些可能是常识性的东西,没有人解释,官网上也没有,但就是不理解,如焦点策略的鼠标滚轮获得焦点必选是鼠标已经在控件之上才行、what’s this怎么触发;
    3、 一些英文怎么翻译才好理解,如本节部分表格中有中英文对照的内容、Dock Wigdet是否该翻译成停靠部件等;
    4、 还有一些验证时有时不成功有时不能成功的,如布局控件内部件的从右往左对齐方向对主窗口菜单的影响试了几次有不同的效果,也不知道原因。

    好歹经过多方查找各种资料、测试验证,绝大部分问题都弄清楚了,可能还有极个别的没有完全理解透彻。从9月下旬开始,断断续续的将来源于QWidget类且在Qt Designer中属性编辑可见的属性的功用逐个再次总结记录下来,又花了三天时间整理成本文的内容,并将这些属性进行了分类。因此本文绝对不是简单的翻译或资料汇聚,是老猿前后花了近20天心血研究、整理的产物,还有少数几个细节问题没有完全弄透彻,但就整体来说,对初学者应该是基本够用了,希望帮助到大家。


    博客地址:https://blog.csdn.net/LaoYuanPython

    老猿Python博客文章目录:https://blog.csdn.net/LaoYuanPython/article/details/98245036

    展开全文
  • 目录 面向对象编程 常用术语/名词解释 抽象/实现 封装/接口 ...私有属性和公有属性 ... ...创建 ...类属性 ...的数据属性 ...的方法属性(函数属性) ...查看属性 ...在构造器首先设置实例属性 默认参
  • 小型商城系统的分类/产品属性/扩展属性的数据库设计  正文:  之前发表过一篇"商城系统【商品扩展属性】的表单生成及客户端验证",部分童鞋对于后台数据库的设计比较感兴趣,于是今天把这部分也补上...
  • C++定义与实现(Class)

    千次阅读 2016-09-02 13:43:15
     在C++, 用 "" 来描述 "对象", 所谓的"对象"是指现实世界的一切事物。那么就可以看做是对相似事物的抽象, 找到这些不同事物间的共同点, 如自行车和摩托车, 首先他们都属于"对象", 并且具有一定得相同点, 和...
  • 【Python】 如何动态添加类属性与方法

    万次阅读 多人点赞 2018-08-08 15:29:37
    但是有些概念又是一时半会讲不清楚,所以笔者尽量找到简练形象的描述,并附上参考链接。  对象 属性 方法 实例   (1) - 《零基础学python》(第二版):https://docs.pythontab.com/learnpython/206/ ...
  • java中类是什么意思

    千次阅读 2021-02-12 10:44:58
    (Class)是面向对象程序设计(OOP,Object-Oriented ...是面向对象语言的程序设计的概念,是面向对象编程的基础。可以看成是创建Java对象的模板。 (推荐学习:java课程)的实质是一种引用数据类型,类似于byt...
  • 面向对象这个概念在很多语言中都有接触过,尤其在c++这个概念就是整个语言的核心。那什么是面向对象?也许我们对它都有个似懂非懂的概念,但无法完全清晰的理解。本文先大概描述面向对象的概念,再通过一个例子来...
  • Spring基于注解方式实现属性注入(超详细)

    千次阅读 多人点赞 2021-01-17 16:49:11
    基于注解方式实现属性注入首先需要开启开启组件扫描注入对象类型属性注入普通类型属性 注解 说明 @AutoWired 根据属性类型自动装配 @Qualifier 根据属性的名称注入要和@AutoWired一起使用 @Resource ...
  • Java的基本操作单元 - 和对象

    千次阅读 多人点赞 2020-02-26 18:51:25
    文本关键字:属性、行为、实例化、对象。说到和对象,这都是两个比较抽象的词,如果用在程序,那就更不知道是什么意思了。其实大家可以先不联系程序,我们在对一大堆东西分类的时候自然是有一个标准的,符合...
  • Java中类和对象的区别

    千次阅读 2021-07-10 16:53:53
    一、和对象 1、 的理解 ...是对现实生活中一具有共同属性和行为的事物的抽象 对象:是能够看得到摸的着的真实存在的实体 简单理解:是对事物的一种描述,对象则具体存在的事物
  • 2) 在系统,每个具有一定的职责,职责指的是所担任的任务,即要完成什么样的功能,要承担什么样的义务。一个可以有多种职责,设计得好的一般只有一种职责,在定义的时候,将的职责分解成为属性...
  • java定义的格式是什么

    千次阅读 2021-03-01 11:04:54
    java定义的格式是什么发布时间:2020-06-29 11:14:51来源:亿速云阅读:166作者:...是具有共同属性和服务的对象的抽象(或集合),其内部包括属性和服务两个主要部分;对象——是具体的。是系统用来描述客观事物...
  • 研究生Graduate既有学生Student的属性,又有教师Teacher的属性,通过多重继承说明一个研究生Graduate。 从前面实验题目完成的Person派生出Teacher,新增专业(dept)和月薪(salary)属性,并定义Teacher...
  • 以面向对象的编程思想,就可以将某一类中共同的特征和行为封装起来,把共同特征作为属性(也叫成员变量),把共同行为作为的方法(也叫成员方法)。本节将对Java中类的定义格式、的成员变量和成员方法进行详细.....
  • Java讲课笔记09:与对象

    千次阅读 2020-04-25 17:50:49
    面向对象3、面向对象三大特性(1)封装(encapsulation)(2)继承(inheritance)(3)多态(polymorphism)二、Java与对象1、与对象的关系2、的定义(1)的定义格式(2)声明成员变量(3)声明成员...
  • AD域常见属性名词解释

    万次阅读 2015-05-20 09:00:32
    AD域常见属性名词解释 Active Directory(AD)活动目录 schema对象模型 Organizational Unit(OU)组织单位 Distinguished name(DN)识别名 Canonical Name(CN)正式名称 Domain Controllers(DC)域控制...
  • 我们读不同的描写数据库的文章,会看到不同的概念名称,从某种意义上来讲,是公说公...至于如何定义一个实体,则会根据不同的需要,不同的视角有所不同,比如我们将生物作为实体,那么我们就考虑这个实体有哪些属性
  • 文章目录包包(package)的作用JDK主要的包包的命名规范导入(import)方法方法的使用方法的重载(Overload)以及方法的重写(Override)对象(Object)和(class)面向过程和面向对象对象的本质对象和的概念的定义...
  • 从前面实验题目完成的Person派生出Teacher,新增专业(dept)和月薪(salary)属性,并定义Teacher的构造函数初始化新增的数据成员,showMe成员函数显示新增的数据成员的值。 再从Person派生出Student,...
  • C++如何创建一个

    千次阅读 2019-10-12 10:59:56
    把对象共同的特征抽象为属性(成员变量) 共性 成员变量 用来 描述事物的特征 3.里的函数 里面的函数 即方法 成员方法(函数) 把对象共同的行为抽象方法(函数) 成员方法 用来 描述事物的行为 4.创建...
  • 如何对属性进行校验呢 比如有个要保证 age 属性 它只能是int类型且大小处于0到100之间? 第一直觉就是用get 和set 方法如下: 1.基本的调用 set 和get 方法 class Student: def __init__(self): pass def get...
  • java

    千次阅读 多人点赞 2020-08-06 18:03:54
    4.1.是什么?   1.–类型–数据类型—复合数据类型—自定义复合数据类型 ...在java用来描述具有共同性质的一组事物的自定义的复合数据类型—。   复合数据类型的本质—【根据自己的
  • 一、图像常用属性本节指的是一般来说,图像处理的一些角度,也是根据一些美图软件最为关注的一些图像属性: 基本属性:图像亮度,对比度,色彩饱和度,清晰度(锐度) 色阶:曝光、高光、阴影 颜色:色温、色调 . 1...
  • 数据库学习3-列属性(字段属性

    千次阅读 2021-01-14 16:07:18
    属性又称为字段属性,在mysql中共有6个属性,null,默认值,列描述,主键,唯一键和自动增长 null属性 null属性,代表字段空 如果对应的值YES表示该字段可以空值 注意: 在设计表的时候,尽量不要让...
  • 注:书第五章-调优案例分析与实战,包含几个案例分析和eclipse调优,但是其中的例子很简单,就先不整理到笔记里了
  • 给swagger的接口添加描述

    千次阅读 2020-01-16 14:54:37
    swgger非常便于前后端分离开发,通过给swagger添加描述就可以实现前后端共同的开发接口,以下介绍如何给swagger的接口添加描述。 一.创建实体,并在实体和属性上使用@ApiModel()、@ApiModelProperty()注解。 注解...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 162,597
精华内容 65,038
关键字:

共同属性被描述为类中的