Qt的一些基础知识

来源:互联网 发布:adobe xd cc2018 mac 编辑:程序博客网 时间:2024/04/28 07:04

Qt中的每个类,都有一个对应的同名头文件,其中包含其类定义。例如要使用QApplication类,则需要在程序中添加" #include <QApplication>"  QApplication类用于管理应用程序范围内的资源。其构造函数需要main函数的argc和argv作为参数。    widget被创建时都是不可见的(always created hidden)。widget中可容纳其它widget。 Qt中的widget在有用户行为或状态改变时会emit signal。 signal可以和slot函数连接在一起(connect),这样当有signal被emit时,对应的slot函数会被自动调用。  QWidget类的构造函数需要一个 QWidget * 指针作为参数,表示其parent widget(默认值为0,即不存在parent widget)。在parent widget被删除时,Qt会自动删除其所有的child widget。  Qt中有三种Layout Manager 类: QHBoxLayout,QVBoxLayOut,QGridLayOut。基本模式是将widget添加进LayOut,由Layout自动接管widget的尺寸和位置。  启动Qt程序时可以通过 -style 参数改变程序的默认显式风格。 Chapter 2 Creating Dialogs 2.1 Subclassing Dialog  Qt中所有dialog的基类是QDialog。QDialog派生自QWidget。  Qt中所有定义了signal或slot的类,在其类定义的开始处都要使用Q_OBJECT宏。Qt中的signal关键字实际上是宏定义。类似的,slots关键字也是宏定义。  Qt所提供的类分为若干模块:Qtgui,QtNetWork,QtOpenGL,QtSql, QtSvg和QtXml等。 QObject::tr() 函数将输入的字符串转换为其他语言(国际化)。对所有用户可见的字符串都使用tr()函数是一个良好的习惯。  buddy:两个widget A和B,若A拥有快捷键,当用户按下该快捷键时,程序的输入焦点自动转移到B上,则称B是A的buddy。  QWidget::close() 是一个slot,其默认行为是使对应的widget隐藏不可见,但并不删除该widget。 Layout 中可包含widget和其他layout。通过嵌套使用QHBoxLayOut、QVBoxLayOut、  QGridLayOut,可以构造非常复杂的dialog。值得注意的是:layout manager 类并不属于widget。实际上,它派生自QLayout,而QLayout又派生自QObject。  QWidget::sizeHint() 返回一个widget()的理想大小(ideal size)。 emit关键字是Qt特有的,用于产生signal。  wk_ad_begin({pid : 21});wk_ad_after(21, function(){$('.ad-hidden').hide();}, function(){$('.ad-hidden').show();});      moc(Meta-Object-Compiler): 对于所有使用了Q_OBJECT宏的类,在编译时都需要通过moc的处理,否则会出现链接错误。解决该错误的办法也很简单,重新执行qmake以更新makefile,然后重新编译。  2.2 Signal and Slot in Depth Signal & Slot 机制是Qt的根基。  Slot和普通的C++类成员函数几乎完全一致;可以是virtual的,可以被重载,可以是public、protected或private的,而且也可所以被其他成员函数直接调用。  signal与slot之间的关联可以是一对一、一对多或多对一。  signal和signal之间也可以被关联,此种情况与signal-slot的区别在于,当第一个sigal被emit时,第二个signal也被emit。  可以调用disconnect()来解除signal 与slot之间的关联,通常情况下很少需要显式调用disconnect(),因为对象被删除时Qt会自动移除与其相关的关联。  sigal-slot或signal-signal这样的关联,要求二者具备相同的参数列表;若signal比slot中的参数多,多余的参数会被忽略。  思维定势:signal-slot机制只能用于widget。实际上signal-slot机制是由QObject实现的,并不仅局限于gui编程,可以用于任何QObject子类。  2.3 Rapid Dialog Design  使用Qt Designer创建的form最终被转换为C++代码。  qmake工具能够检测到interface file(*.ui files),并调用uic,即Qt的user interface compiler。uic将.ui文件转换为C++代码,并存放在形式为ui_xxx.h的文件中。该文件中给出了dialog对应类的完整定义,并包含一个 setupUi()成员函数,用于初始化form。  注意,由uic创建的这个类未派生自任何Qt class。  Qt的 parent-child机制是由QObject实现的。当创建一个对象时若指定了parent,则parent将该对象添加至其 childern list。当parent被删除时,Qt会遍历其childern list并删除每个child,该过程会递归进行。这一机制极大的简化了内存管理,降低了内存泄露的风险——程序员只需显式的删除通过new创建并且没有parent的对象。  对于widget,parent还有一层附加的意义:chidl widget 是显示在parent widget的范围之内的。如果删除parent widget,不仅child widget从内存中被释放,在屏幕上也会消失。  QDialog::accept() 将dialog的返回值设为QDialog::Accepted(值为1),而QDialog::reject()将返回值设为QDIalog::Rejected(值为0)。  2.5 Dynamic Dialogs  Dynamic Dialog指的是程序在运行时根据.ui文件创建的dialog。这样的dialog不是通过uic将.ui转换为C++代码,而是在运行时使用QUiLoader类装载.ui文件。    可以使用QObject::findChild<T> ()来访问form的child widget。  要使用QUiLoader,需要在Qt程序的.pro文件中添加以下内容: config += uitools Dynamic dialog允许在不重新编译程序的前提下更改form的布局。 Chapter 3 Creating Main Windows 3.1 Subclassing QMainWindow  应用程序的主窗口是通过创建QMainWindow的派生类来完成的。QMainWindow和QDialog一样,都是派生自QWidget。  closeEvent()是由QWidget提供的一个虚函数,在用户关闭窗口时会被自动调用。  setCentralWidget()将某个Widget设置为主窗口的central widget, 而central widget意味着在显示时会占据主窗口的中央位置。  Qt下的gui 编程支持多种图形格式。可以使用多种方式为应用程序提供图像,最常见的包括: 1). 将图像存储在文件中,运行时加载之。  2). 在源码中include XPM文件(XPM文件也是合法的C++文件)。 3). 利用Qt的资源机制。  Qt的资源机制比之运行时加载更方便,并对所有支持的图像格式都能良好工作。  为了利用Qt的资源机制,需要创建一个资源文件,并在.pro文件中对应添加一行来对资源文件进行标识。例如:  resources= spreadsheet.qrc  资源文件本身采用了简单的XML格式。它被编译进程序的可执行文件,因此不会被丢失。在对资源进行定位时,使用路径前缀":/",例如“ :/images/icon.png "。资源本身可以是任何类型的文件。  3.2 Creating Menus and Toolbars  Qt通过引入Action这一概念简化了对menu和toolbar的编程。一个Action可以被添加到任意数量menu和toobar中。  在Qt中对menu和toolbar的编程涉及到三个步骤: 1). 创建并设置Action  2). 创建menu,并在其中添加Action 3). 创建toolbar,并在其中添加Action  Action的创建是通过QAction类来实现的,对每个Action,可以为其设置accelerator,parent,shortcutkey, 可见性以及status tip等属性,并可以通过调用connect()为ACtion设置被触发要执行的操作。  QTableWidget的基类QAbstraceItemView提供了selectAll()这个slot。  QApplication类提供了aboutQt()这个slot,可以通过全局变量qApp(一个类型为QApplication *的指针)来使用之。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 两岁宝宝不爱走路怎么办 水鸭子脚不能走了怎么办 鸭子坐着脚走不动怎么办 鸭子步走了腿疼怎么办? 跳爵士舞没感觉怎么办 军校学员体能考核不达标怎么办 俯卧撑新兵连做不动怎么办 宝宝胆小不敢上体能课怎么办 28岁老太太抬头纹剩两颗怎么办 大腿前侧抽筋痛怎么办 电脑看片缓冲慢怎么办 跑步跑的腿疼怎么办 第一次去健身房练瑜伽不会怎么办 跑步过后腿筋疼怎么办 俯卧撑只能做20个怎么办 被裤裆峰咬了怎么办? 新兵5公里不想跑怎么办 老公掉粪坑了你怎么办 在部队被欺负了怎么办 衣服上的标志洗掉了怎么办 整件白衬衣被染怎么办 遇到敲诈小混混该怎么办 纯棉衣服洗长了怎么办 纯棉的衣服洗后长了怎么办 睡觉把脖子扭了怎么办 微信限额10万了怎么办 新兵条令背不下来怎么办 武警部队改革去年入伍的新兵怎么办 规培考试没考上怎么办 规培如果没考上怎么办 农民工集体讨薪 领导不在怎么办 卷闸门钥匙丢了怎么办 邻居把路堵了该怎么办 邻居家的盆栽对准我家大门怎么办 袜子掉到了楼下的阳台怎么办? 合租房没有阳台晒衣服怎么办 车门锁了钥匙在里面怎么办 邻居忘带钥匙你看见会怎么办 把车钥匙锁车里了怎么办 偷了东西不承认怎么办 孩子偷了东西不承认怎么办