zoukankan      html  css  js  c++  java
  • <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类实现。

  • 相关阅读:
    [转]asp.net页面缓存技术
    UL和LI在div中的高度的IE6下兼容性
    jquery制作的横向图片滚动带横向滚动条TackerScroll
    电脑可以上网,但是qq登陆不上去?
    Introduction to discrete event system学习笔记4.6
    Introduction to Discrete event system学习笔记4.9
    Introduction to discrete event systemsstudy 4.5
    Symbolic synthesis of obserability requirements for diagnosability B.Bittner,M.Bozzano,A.Cimatti,and X.Olive笔记4.16
    Introduction to discrete event system学习笔记4.8pm
    Introduction to discrete event system学习笔记 4.8
  • 原文地址:https://www.cnblogs.com/qjswxd/p/11839758.html
Copyright © 2011-2022 走看看