Qt知识

1.QT自绘事件

在QWidget中做自绘一般就是重写void paintEvent(QPaintEvent * event)函数,然后在这个函数里利用QPainter类进行绘制

2.MOC

全称是 Meta-Object Compiler,也就是“元对象编译器”。Qt 程序在交由标准编译器编译之前,先要使用 moc 分析 C++ 源文件。如果它发现在一个头文件中包含了宏 Q_OBJECT,则会生成另外一个 C++ 源文件。这个源文件中包含了 Q_OBJECT 宏的实现代码。这个新的文件名字将会是原文件名前面加上 moc_ 构成。这个新的文件同样将进入编译系统,最终被链接到二进制代码中去。因此我们可以知道,这个新的文件不是“替换”掉旧的文件,而是与原文件一起参与编译。

3.QEventLoop

为我们提供了一种进入和退出一个事件循环的方法,事件循环是一个无限“循环”,当调用事件的exec()的时候,程序就会在exec()里面无限循环,让在exec()后面的程序得不到运行的机会,调用exit()来强制使exec()返回。

子层事件循环具有父层事件循环的所有功能,所以当在主线程中启动各种 exec()(比如QEventLoop::exec())时,虽然会打断main函数中的QApplication::exec(),但是Gui界面还是可以正常响应,不会出现卡住的现象。这与用while来循环是不一样的。

4.QPalette

对话框或控件的调色板,它管理着控件或窗体的所有颜色信息,每个窗体或控件都包含一个QPalette对象

5.QSS

Qt样式表,它是Qt提供的一种用来自定义控件外观的机制

QSS在Qt程序中的使用办法:1.将QSS写在文件中,QString stylesheet = filetext.readAll();

this->setStyleSheet(stylesheet);

QSS的样式是由两部分组成,1.选择器指定了哪些控件会受到影响,2.另一部分是指定了属性的值

6.使用模型操作数据库

QSqlTableModel 的模型处理更为高级,没有实际 SQL 语句方便(具体来说,我们使用 QSqlTableModel 只能进行 SELECT * 的查询,不能只查询其中某些列的数据),如果不需要很多复杂的查询,这种 QSqlTableModel 模型基本可以满足一般的需求。

QSqlTableModel 没有提供 const_iterator 遍历器,因此不能使用 foreach 宏进行遍历。

7.事件

Qt 使用一个事件队列对所有发出的事件进行维护,当新的事件产生时,会被追加到事件队列的尾部。前一个事件完成后,取出后面的事件进行处理。但是,必要的时候,Qt 的事件也可以不进入事件队列,而是直接处理。事件则可以使用“事件过滤器”进行过滤,对于有些事件进行额外的处理,另外的事件则不关心。

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

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

你可能感兴趣的:(Qt)