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


    对话框(QDialog)

        为用户和应用程序之间提供了一种可以相互"交谈"的交互方式。

    宏定义Q_OBJECT

        对于所有定义了信号与槽的类,都必须在类定义的开头加上Q_OBJECT

    moc:

    mocQT的元对象编译器,即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) Qtmoc工具生成用于由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()函数为界面传入了父窗口并实例化界面中的各个窗口部件,这种做法使QtUI界面与逻辑功能分离出来。

     

     

    Qt的父-子对象机制:

    当利用父对象创建一个子对象时(例如实例化一个对话框是,构造函数中传入父对象指针作为参数),父对象会把子对象添加到自己的对象列表中。当删除这个父对象时,它会遍历每一个子对象列表删除每一个子对象。这种机制的好处是很大程序简化了内存的工作,降低内存泄漏风险,更大大方便了开发者做管理内存的工作。对于窗口部件,子窗口部件会显示在父对象所在区域,当父窗口部件删除时,子对象会在屏幕上和内存里消失。

     

    动态对话框:

    动态对话框是指在程序运行期间使用从Qt designer.ui文件中创建的对话框,这不需要通过把.ui文件转换成ui_xxx.h,大大增加了灵活性,这种方式是通过QUiLoader类实现。

  • 相关阅读:
    【BZOJ-4289】Tax 最短路 + 技巧建图
    【BZOJ-3895】取石子 记忆化搜索 + 博弈
    【BZOJ-4569】萌萌哒 ST表 + 并查集
    【BZOJ-3832】Rally 拓扑序 + 线段树 (神思路题!)
    【BZOJ-4213】贪吃蛇 有上下界的费用流
    【BZOJ-3122】随机数生成器 BSGS
    【BZOJ-2299】向量 裴蜀定理 + 最大公约数
    【BZOJ-1441】Min 裴蜀定理 + 最大公约数
    【BZOJ-2438】杀人游戏 Tarjan + 缩点 + 概率
    【BZOJ-4310】跳蚤 后缀数组 + ST表 + 二分
  • 原文地址:https://www.cnblogs.com/qjswxd/p/11839758.html
Copyright © 2020-2023  润新知