Qt学习之路

坐标系统

物理坐标,是指显式出来的;逻辑坐标是不会变化的。

信号槽

signal 类似广播,发出一个信号,感兴趣的对象使用connect函数来连接这个信号,然后,使用自己的一个函数作为slot(槽)处理这个信号,回调槽函数。

信号就是一个函数,返回值为void,参数为想传递出去的值,信号不需要实现代码,是Qt的一种特性,

MainWindow

Qt学习之路_第1张图片
mw-struct.png

对象类型

QObject是以对象树的形式组织起来的。当你创建一个QObject对象时,会看到QObject的构造函数接收一个QObject指针作为参数,这个参数就是 parent,也就是父对象指针。这相当于,在创建QObject对象时,可以提供一个其父对象,我们创建的这个QObject对象会自动添加到其父对象的children()列表。当父对象析构的时候,这个列表中的所有对象也会被析构。(注意,这里的父对象并不是继承意义上的父类!)这种机制在 GUI 程序设计中相当有用。例如,一个按钮有一个QShortcut(快捷键)对象作为其子对象。当我们删除按钮的时候,这个快捷键理应被删除。这是合理的。

尽量指定parent指针,尽量在堆上创建.

QPushButton quit("quit");
QWidget window;
quit.setParent(&window);

C++标准规定局部变量按照栈的顺序析构,即先创建的后析构。这段代码会导致程序崩溃,因为quit被析构了2次。

Dialog

Qt的模态和非模态是由Qt::WindowModal这个属性决定的,默认为false,exec()方法执行的时候会使得这个属性变为true,返回的时候又变回false。

Qt5新式信号槽写法

Qt4使用SIGNAL和SLOT两个宏来连接信号槽,在Qt5中使用函数指针的形式,这是为了使得问题暴露在编译期。
对于有重载的信号,要显式指定调用的是哪个信号,最好使用下面这这种形式,而不是C风格的强制转换。

QObject::connect(&newspaper,
                 static_cast(&Newspaper::newPaper),
                 &reader,
                 &Reader::receiveNewspaper);

带默认参数的槽函数用Qt5来写需要使用Lambda函数来写。

事件

如果我们使用组件,我们关心的是信号槽;如果我们自定义组件,我们关心的是事件。

当重写事件回调函数时,时刻注意是否需要通过调用父类的同名函数来确保原有实现仍能进行!

事件的传播是在组件层次上面的,而不是依靠类继承机制。
accept表示事件对象想要处理这个事件,停止事件传播;ignore表示事件对象不想处理这个事件,会在事件的处理链上继续找寻另外的接收者。

Qt 做了特殊的设计:事件对象默认是 accept 的,而作为所有组件的父类QWidget的默认实现则是调用ignore()。

安装了事件过滤器的控件收到的所有事件会被发送到事件过滤器处。

qglobal.h,这个文件中控制了Qt具体的某一模块

qobject_cast

T qobject_cast ( QObject * object )
本方法返回object向下的转型T,如果转型不成功则返回0,如果传入的object本身就是0则返回0。
在使用时有两个限制:
1.T类型必须继承自QObject。
2.在声明时必须有Q_OBJECT宏。

qt迭代器

qt迭代器访问findChildren返回的qlist的时候会重置控件,不知道为什么。TODO

qt绘制

没有父控件的控件被称为窗口,

qt多线程

QThread只有run函数是在新线程里的

QGraphicsScene

removeItem():不会删除item的内存,item的内存管理由程序员来负责

clear():会remove所有item并删除内存。

addItem():添加到scene里

M/V结构

委托:

你可能感兴趣的:(Qt学习之路)