Qt creator 快速入门(一)

第8章 界面外观

调色板QPalette类包含了部件各种状态的颜色组。一个调色板包含3种状态:
- 激活颜色组QPalette::Active,用于获得键盘焦点的窗口;
- 非激活颜色组QPalette::Inactive,用于其他的窗口;
- 失效颜色组QPalette::Disabled,用于一些原因而不可用的部件。

Qt样式表
Qt样式表的术语和规则与HTML CSS(Cascading Style Sheets,CSS)层叠样式表基本相同。
1. 样式规则
样式表包含一些列的样式规则,一个样式规则由一个选择符(selector)和声明(declaration)组成。选择符指定了受该规则影响的部件,声明指定了这个部件上要设置的属性。如:
QPushButton{color:red}
其中QPushButton为选择符,{color:red}为声明,color为属性,red为值。

  1. 选择符类型
    如:
选择符 示例 说明
通用选择符 * 匹配所有部件
类型选择符 QPushButton 匹配所有QPushButton实例和它的所有子类
属性选择符 QpushButton[flat=”false”] 匹配QPushButton的属性flat为false的实例
…… …… ……

3. 子控件
QComboBox::drop-down{image:url(dropdown.png)}

  1. 伪状态
    如:
QPushButton:hover{color:red}
QPushButton:!hover{color:red}//表示否定
QCheckBox:hover:checked{color:white}//逻辑与的效果
QCheckBox:hover,QCheckBox:checked{color:white}//逻辑或的效果
  1. 冲突解决

    • 特殊的选择符优先;
    • 有伪状态的优先;
    • 特殊性相同,则后出现的优先。
  2. 层叠
    部件有效的样式表是通过部件祖先的样式表和QApplication上的样式表合并得到的。当发生冲突时,部件自己的样式表优先于任何继承的样式表。

盒子模型
当使用样式表时,每一个部件都看作是一个拥有4个同心矩形的盒子,这四个矩形分别是内容(content)、填衬(padding)、边框(border)和边距(margin)。边距、边框和填衬的宽度默认值都是0。
image绘制在border-image之上,border-image绘制在background-image之上。background-image无法随着部件的大小来自动缩放,需要使用border-image。

第7章 信号与槽

使用信号和槽应该注意的几点:
- 需要继承自Qobject或其子类;
- 在类声明的最开始添加Q_OBJECT宏;
- 槽中的参数类型要和信号的参数的类型相对应,且不能比信号的参数多;
- 信号只要声明,没有定义,且返回值为void类型。

模型:connect(object1,signal,object2,slot);

信号和槽机制的特色和优越性:
- 信号和槽机制是类型安全的,相关联的信号和槽的参数必须匹配;
- 信号和槽是松耦合的,信号发送者不知道也不需要知道接受者的信息;
- 信号和槽可以使用任意类型的任意数量的参数。

回调函数
回调就是指向函数的指针,把这个回调函数指针传递给要被处理的函数,那么就可以在这个函数被处理时在适当的地方调用这个回调函数。回调机制主要有两个缺陷:
1. 不是类型安全的(type-safe),不能保证在调用回调函数时可以使用正确的参数;
2. 强耦合的,处理函数必须要知道调用哪个函数。

元对象系统
Qt中的元对象系统(Meta-Object system)提供了对象建通信的信号和槽机制、运行时类型信息和动态属性系统。元对象系统是基于以下3个条件的:
- 该类必须继承自QObject类;
- 必须在类的私有声明区声明Q_OBJECT宏(默认为private);
- 元对象编译器Meta-Object Compiler(moc),为QObject的子类实现元对象特性提供必要的代码。

隐式共享
(Implicit Sharing)又称写时复制(copy-on-write)。Qt中主要的隐式共享类有:QByteArray、QCursor、QFont、QPixmap、QString、QUrl、QVariant和所有的容器类等。当隐式共享类使用“=”操作符时就使用浅拷贝,当一个对象被修改时,就必须进行深拷贝。深拷贝意味着复制一个对象,而浅拷贝则是复制一个引用(仅仅是一个指向共享数据块的指针)。

第6章 事件系统

一个事件由一个特定的QEvent子类来表示,一个事件有可能包含多个事件类型,如鼠标事件又分为按下、移动、双击等事件。在QCoreApplication类的notify()函数的帮助文档处给出了5种处理事件的方法:
- 方法一:重新实现部件的paintEvent()、mousePressEvent()等事件处理函数。
- 方法二:重新实现notify()函数,一次只能处理一个事件。
- 方法三:向QApplication对象上安装事件过滤器,可以同时处理多个事件。
- 方法四:重新实现event()函数,QObject类的event()函数可以在事件到达默认事件处理函数之前获得该事件。
- 方法五:在对象上安装事件过滤器。使用事件过滤器可以在一个界面类中同时处理不同子部件的不同事件

事件传递顺序例子:部件事件过滤器->子部件的event()函数->子部件的事件处理函数->部件的事件处
理函数。确切地说应该是先传递给获得焦点的窗口部件的。
要对一个部件使用事件过滤器,那么就先要使用该部件的installEventFilter()函数为该部件安装事件过滤器。如果对一个特定的事件进行处理,而且不希望它在后面的传递过程中再被处理,那么就返回true,否则返回false。

第4章 布局管理

一旦一个部件设置了布局管理器,那么它会完成一下几种任务:
- 定位子部件;
- 感知窗口默认大小;
- 感知窗口最小大小;
- 改变大小处理;
- 当内容改变时自动更新:
- 字体大小,文本或子部件的其他内容随之改变;
- 隐藏或显示子部件;
- 移除一个子部件;

第5章 应用程序主窗口

QMainWindow类拥有自己的布局:
- 菜单栏(QMenuBar),菜单栏包含一个下拉菜单项的列表,这些菜单项由QAction动作来实现。
- 工具栏(QToolBar),工具栏一般用于显示一些常用的菜单项目,也可以插入其他窗口部件。
- 中心部件(Central Widget)
- Dock部件(QDockWidegt),Dock部件常被称为停靠窗口。
- 状态栏(QStatusBar)

你可能感兴趣的:(Qt)