Qt学习笔记

       前段时间听说公司有的产品开始用Qt做客户端了,于是觉得用了这么久的mfc,在应用程序客户端编程上该拓展一下眼界了,决定看看Qt。下面内容是在学习Qt过程中做的一些摘录,现在整理出来,希望对准备学习Qt或者刚刚学习Qt的同学有帮助。

       1. Qt简介
       一个跨平台、开源的C++图形用户界面库。

       2. 下载与安装
       Qt下载地址: http://qt-project.org/downloads,如果打算开发Qt程序使用vs系列编辑器,则还需要下载相应的插件,在上面链接页面下部可以看到插件下载项。整个安装过程很简单,这篇文章讲的很详细,可以看看: http://blog.csdn.net/skeeee/article/details/10187561

       3. Meta Object Compiler
       moc全称是 Meta-Object Compiler,也就是“元对象编译器”。Qt并不是使用标准C++语言,而是对其进行了一定程度的扩展,从Qt中经常使用的几个关键字就可以看出来:signals、slots 或者 emit。在Qt将源代码交给标准C++编译器前,如果发现在一个头文件中包含了宏Q_OBJECT,则需要先将这些扩展的语法进行转译,然后生成另外一个C++源文件,新的文件名将会是原文件名前面加上moc_构成,完成这一操作的就是moc。这也是Qt程序编译速度慢的原因。

       4. Qt内存管理
       对于习惯了配对使用new/delete的C++程序员,刚开始学习Qt时,看到demo程序中new了一堆对象,但程序结束时却不delete对象,内心不禁想说:“这里有内存泄露”。其实Qt有一套与众不同的内存管理机制,简单的说就是如果在new的时候指定了父对象,那么子对象的清理是在父对象被delete的时候delete的,即由父对象统一管理子对象的内存清理工作,子对象无需自己清理。更多内存管理机制可以参考这篇文章,讲的很详细: http://blog.csdn.net/leonwei/article/details/3703598。最后要说的是,这种内存管理机制仅对继承自QObject的类起作用。
       下面是在Stack Overflow上的一些摘录:
       As with QObjects, widgets can be created with parent objects to indicate ownership, ensuring that objects are deleted when they are no longer used. With widgets, these parent-child relationships have an additional meaning: each child is displayed within the screen area occupied by its parent. This means that, when a window is deleted, all the widgets it contains are automatically deleted.
       在创建对象时,可以显式的为其指定父对象,当然也可以不显式的为其指定父对象,通过其他途径同样可以建立父子对象联系。如下面例子:
       There are several situations where one object becomes the owner of another, not just when you create an object and specify its parent. these rules apply ONLY to objects that derive from QObject. If your class does not derive from QObject, you'll have to handle the destruction yourself.
For instance:
QVBoxLayout* layout = new QVBoxLayout;
QPushButton someButton = new QPushButton;// No owner specified.
layout->addWidget(someButton);// someButton still has no owner.
QWidget* widget = new QWidget;
widget->setLayout(layout);// someButton is "re-parented".
                          // widget now owns someButton.

Another example:
QMainWindow* window = new QMainWindow;
QWidget* widget = new QWidget;   // widget has no owner
window->setCentralWidget(widget);// widget is now owned by window.
       
       5. 信号槽机制是Qt编程的基础。通过信号槽机制,使Qt各组件在不知道对方的情形下能够相互通讯。这就将类之间的关系做了最大程度的解耦。槽函数和普通的C++成员函数没有什么区别。它们可以使用virtual修饰、可以被重写,参数可以是任何类型的,当然也可以被其它C++函数调用。如果要说有区别,那就是槽函数可以和一个信号相连接,当这个信号发生时,它可以被自动调用。
       信号与槽参数传递说明:
       (1)当信号与槽函数的参数数量相同时,它们参数类型要完全一致;
       (2)当信号与槽函数的参数数量不同时,只能是信号的参数数量多于槽函数的参数数量,且前面相同数量的参数类型应一致,信号中多余的参数会被忽略。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值