Qt控件及事件处理

来源:互联网 发布:神回复 知乎 编辑:程序博客网 时间:2024/05/19 00:38

1.    Qt有三个主要的布局管理器类:

QHBoxLayout:在水平方向上排列窗口部件(从左到右)

QVBoxLayout:在竖直方向上排列窗口部件(从上到下)

QGridLayout:把各个窗口部件排列在网格中

QFormLayout:常使用addRow函数,布局完成后一边是lable,一边是spinBox /lineEdit / ComboBox等

Qt最常见的做法是先声明所需要的部件,然后设置它们所具备的的属性。把这些部件添加到布局中,布局会自动设置他们的大小个位置。最后利用信号和槽机制管理部件之间的交互行为。

2.    <QtGui>头文件为构成QtCore和QtGui组成部分的所有类进行了定义,在程序中包含这个头文件就行了,省去了每个类分别包含的麻烦。

3.    尽管目前没有将程序翻译成其他语言,但是在每一个用户可见的字符串周围使用tr()函数是一个不错的习惯。注意不要滥用tr(),一般是在用户可见的地方使用,进行翻译。

4.    使用”&”表示快捷键,另外,“伙伴”(buddy)就是一个窗口部件设置成label的buddy,那么按下标签的快捷键时,该窗口部件可以成为接收焦点。

5.    QPushButton可以设置默认按钮:setDefault()。默认按钮就是用户在按下enter时能够按下相应的按钮。

6.    Layout可以增加分隔符(伸缩量):addStrech(),平均分配剩余的空白区域。

7.    Qt提供的四种类型按钮:QPushButton,QToolButton,QCheckBox,QRadioButton。QToolButton与QPushButton区别之一在于QToolButton可以设置菜单。

8.    Qt提供的容器窗口部件是一种可以包含其他窗口部件的窗口部件。单页容器窗口部件包括:QGroupBox和QFrame(带边框部件的基类如QToolBox,QLabel)。QGroupBox 提供一个带标题的矩形框将某些具有相同功能属性的选项框在一起。QFrame类也有类似的功能,但是它仅仅提供一个矩形,并没有标题部分。多页窗口部件包括QTabWidget和QToolBox。QTabWidget一般用来实现多属性标签页 ,而QToolBox一般用来实现“抽屉”功能,类似于好友分组功能。

9.    Qt提供的项视图窗口部件包括QListView(列表和图表),QTreeView和QTableView等。

10.  Qt提供的纯粹用来显示信息的窗口部件包括QLabel(文本和图片),QLCDNumber,QProgressBar和QTextBrowser(只读型的QTextEdit子类)。Qt提供的用于数据输入的窗口部件包括QSpinBox,QDoubleSpinBox,QComboBox,QDateEdit,QTimeEdit,QDateTimeEdit,QScrollBar,QSlider,QLineEdit, QTextEdit和QDial。QLineEdit可以使用一个输入掩码、一个检验器或者同时使用两者对输入进行限定。QTextEdit是QAbstractScroll的子类,具有处理大量文本的能力,可以设置用于编辑普通文本或者富文本。

11.  Qt提供的反馈对话框包括QlnputDialog,QProgressDialog,QMessageBox和QErroressage。标准通用对话框包括QColorDialog,QFontDialog,QPageSetupDialog,QFileDialog和QPrintDialog。

12.  将一个动作添加到菜单中过程:新建QAction并父对象(主窗口),setIcon,setShortCuts,setStatusTips,connect(newAction,SIGNAl(triggered()) , this , SlOT(newFile()));

13.  QMessageBox的种类:warning,information,question和critical。

14.  所谓模态对话框就是在其没有被关闭之前,用户不能与同一个应用程序的其他窗口进行交互,直到该对话框关闭。对于非模态对话框,当被打开时,用户既可选择和该对话框进行交互,也可以选择同应用程序的其他窗口交互。

15.  不应该混淆"事件"和"信号"这两个概念。一般情况下,在使用窗口部件的时候,信号是十分有用的;而在实现窗口部件时,事件则是十分有用的。

16.  Qt事件处理的一般方法:

event():首先是控制事件分发的event()函数,我们可以改写该函数,改变事件的分发方式,这样就可以改变事件处理的结果。

notify()函数:实现该函数可以截获事件,并对事件加以处理,但是该方法很少用,这里不做介绍。

事件过滤:对象一旦使installEventFilter( )注册过,用于目标对象的所有事件都会首先发送给这个监视对象的eventFilter( )函数。如果在同一个对象上安装了多个事件处理器,那么就会按照安装顺序逆序,从最近安装的到最先安装的,依次激活这些事件处理器。

事件处理:事件处理的最后一步,也是最重要的一步就是事件处理器,因为它才是真正进行事件处理的地方,我们可以改写以有的事件处理器,以此改变已有事件的处理方法和处理结果,我们也可以定义自己的事件类型和相应的事件处理器。重新实现像mousePressEvent( )、keyPressEvent( )和paintEvent( )这样的事件处理器是到现在为止最常用的事件处理方式。

注意:最常用的就是事件过滤器和事件处理器

1 0
原创粉丝点击