<C++ QT4 GUI 编程>第二章笔记

对话框(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类实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值