对话框(QDialog):
为用户和应用程序之间提供了一种可以相互"交谈"的交互方式。
宏定义Q_OBJECT:
对于所有定义了信号与槽的类,都必须在类定义的开头加上Q_OBJECT。
moc:
moc指QT的元对象编译器,即meta-object compiler,由于某些类的定义包含了宏Q_OBJECT,因此在编译阶段会由qmake生成的makefile将会自动包含一些运行moc的规则,如果在编译时出现以下错误:
GCC:
VC++(遇到过):
那么重新运行qmake再编译可以解决。
信号和槽:
QT4表现:
connect(sender,SIGNAL(signal),receiver,SLOT(slot));
1、一个信号可以连接多个槽,当信号发射时槽会以不确定的顺序执行。
2、多个信号可以连接同一个槽
3、一个信号可以与另一个信号相连接,如:
connect(sender,SIGNAL(signal),receiver,SIGNAL(signal));
4、连接可以被移除,当删除对象时,Qt也会自动移除连接,如:
disconnect(sender,SIGNAL(signal),receiver,SLOT(slot));
5、信号和槽的参数必须要有相同的顺序和类型,信号的参数可以比槽的参数多,多的 部分会被忽略。
6、信号和槽是有可能出现无限循环的情况,因此使用时要注意。
Qt元对象系统:
1、这是一种Qt独有的机制,这种机制是将所有独立的组件绑定在一起,任何一个组件对他连接组件的情况在连接前都是未知的。
2、他提供两项关键技术:信号槽和内省(所谓内省是指面向对象语言的一种在运行期间查询对象信息的能力, 比如如果该语具有运行期间检查对象型别的能力,那么我们称它是型别内省(type intropection))。
3、内省是信号槽实现的基础,他能让开发人员在程序运行时获得QObject子类的“元信息”(meta-information),包括一个含有对象的类名以及他所支持信号和槽列表。
4、元对象系统所需的元对象信息由moc工具提供,moc通过解析Q_OBJECT类的定义并通过C++函数来提供信息,由于moc使用C++来实现功能,所以Qt的元对象系统可以在任何C++编译器下运行。
5、元对象系统机制的工作方式是:
(1) Q_OBJECT宏声明了每一个QObject子类必须实现的一些内省函数,如mtaObject()、tr()、qt_metacall()等。
(2) Qt的moc工具生成用于由Q_OBJECT宏声明的所有函数和所有信号的实现,即moc_xxx.cpp等文件
(3) 想connect()和disconnect()等这些QObject的成员函数由内省函数来完成他的工作。
(对于Qt元对象系统有一个初步的印象,但还是没有理解透彻,以后再待研究。)
Qt design一些使用技巧(查漏补缺):
1、在Text属性中使用&可以实现快捷键的效果。
2、设置伙伴模式的步骤:(1)点击Edit->Edit Buddies (2)单击标签将红色箭头指向伙伴标签上 (3)点击Edit->Edit Widget离开伙伴设置模式。
3、工具->Form Editor->Adjust可以重新把窗体大小定义为最佳形式。
4、设置Tab键顺序步骤:(1)单击Edit->Edit Tab Order (2)然后按你想要的顺序单击每一个部件 (3)点击Edit->Edit Widget离开设置模式
5、预览窗体显示效果,可以使用快捷键Alt+Ctrl+R可以使点击工具->Form Editor->Preview in选择各种风格。
6、按钮属性中checkable设置为true可以将按钮有checkBox的效果
ui_xxxx.h文件说明:
1、当有界面文件.ui存在时,在编译阶段会生成ui_xxxx.h文件。
2、打开一个ui_mainwindow.h文件,可以看见里面定义了一个没有基类的类Ui_MainWindow,该文件是真正的界面布局文件,储存了窗口部件和布局;在文件的末尾进行了Ui命名空间的定义,里面定义了一个MainWindow类:
3、在mainwindow.h中,会看到在Ui命名空间中对MainWindow进行声明,这个MainWindow并不是mainwindow.h中定义的MainWindow类,而是在第二点处定义的继承Ui_MainWindow的类,并在新定义的MainWindow类中声明一个Ui::MainWindow的指针ui:
4、通过实例化ui对象,调用setupUi函数把界面显示出来,setupUi()函数为界面传入了父窗口并实例化界面中的各个窗口部件,这种做法使Qt把UI界面与逻辑功能分离出来。
Qt的父-子对象机制:
当利用父对象创建一个子对象时(例如实例化一个对话框是,构造函数中传入父对象指针作为参数),父对象会把子对象添加到自己的对象列表中。当删除这个父对象时,它会遍历每一个子对象列表删除每一个子对象。这种机制的好处是很大程序简化了内存的工作,降低内存泄漏风险,更大大方便了开发者做管理内存的工作。对于窗口部件,子窗口部件会显示在父对象所在区域,当父窗口部件删除时,子对象会在屏幕上和内存里消失。
动态对话框:
动态对话框是指在程序运行期间使用从Qt designer的.ui文件中创建的对话框,这不需要通过把.ui文件转换成ui_xxx.h,大大增加了灵活性,这种方式是通过QUiLoader类实现。